示例#1
0
bool MgCmdManagerImpl::registerCommand(const char* name, MgCommand* (*creator)())
{
    bool ret = (name && _factories[name] != creator);
    
    if (ret && !creator) {
        _factories.erase(name);
    }
    else if (ret) {
        _factories[name] = creator;
        LOGD("registerCommand %d: %s", (int)_factories.size(), name);
        return true;
    }
    
    return ret;
}
示例#2
0
MgCommand* MgCmdManagerImpl::findCommand(const char* name)
{
    CMDS::iterator it = _cmds.find(name);
    
    if (it == _cmds.end() && *name)
    {
        MgCommand* cmd = NULL;
        Factories::iterator itf = _factories.find(name);
        
        if (itf != _factories.end() && itf->second) {
            cmd = (itf->second)();
        }
        if (!cmd && strcmp(name, "select") == 0) {
            cmd = MgCmdSelect::Create();
        }
        if (cmd) {
            _cmds[name] = cmd;
            it = _cmds.find(name);
        }
    }
    
    return it != _cmds.end() ? it->second : NULL;
}
示例#3
0
AddFactories::AddFactories()
{
    Factories * objectFactory = Factories::instance();

    objectFactory->addFactory("root", &factory<RootData>, ROOT_NO);

    objectFactory->addFactory("root_entity", &factory<Entity::RootEntityData>, Entity::ROOT_ENTITY_NO);

    objectFactory->addFactory("admin_entity", &factory<Entity::AdminEntityData>, Entity::ADMIN_ENTITY_NO);

    objectFactory->addFactory("account", &factory<Entity::AccountData>, Entity::ACCOUNT_NO);

    objectFactory->addFactory("player", &factory<Entity::PlayerData>, Entity::PLAYER_NO);

    objectFactory->addFactory("admin", &factory<Entity::AdminData>, Entity::ADMIN_NO);

    objectFactory->addFactory("game", &factory<Entity::GameData>, Entity::GAME_NO);

    objectFactory->addFactory("game_entity", &factory<Entity::GameEntityData>, Entity::GAME_ENTITY_NO);

    objectFactory->addFactory("root_operation", &factory<Operation::RootOperationData>, Operation::ROOT_OPERATION_NO);

    objectFactory->addFactory("action", &factory<Operation::ActionData>, Operation::ACTION_NO);

    objectFactory->addFactory("create", &factory<Operation::CreateData>, Operation::CREATE_NO);

    objectFactory->addFactory("combine", &factory<Operation::CombineData>, Operation::COMBINE_NO);

    objectFactory->addFactory("divide", &factory<Operation::DivideData>, Operation::DIVIDE_NO);

    objectFactory->addFactory("communicate", &factory<Operation::CommunicateData>, Operation::COMMUNICATE_NO);

    objectFactory->addFactory("talk", &factory<Operation::TalkData>, Operation::TALK_NO);

    objectFactory->addFactory("delete", &factory<Operation::DeleteData>, Operation::DELETE_NO);

    objectFactory->addFactory("set", &factory<Operation::SetData>, Operation::SET_NO);

    objectFactory->addFactory("affect", &factory<Operation::AffectData>, Operation::AFFECT_NO);

    objectFactory->addFactory("move", &factory<Operation::MoveData>, Operation::MOVE_NO);

    objectFactory->addFactory("wield", &factory<Operation::WieldData>, Operation::WIELD_NO);

    objectFactory->addFactory("get", &factory<Operation::GetData>, Operation::GET_NO);

    objectFactory->addFactory("perceive", &factory<Operation::PerceiveData>, Operation::PERCEIVE_NO);

    objectFactory->addFactory("look", &factory<Operation::LookData>, Operation::LOOK_NO);

    objectFactory->addFactory("listen", &factory<Operation::ListenData>, Operation::LISTEN_NO);

    objectFactory->addFactory("sniff", &factory<Operation::SniffData>, Operation::SNIFF_NO);

    objectFactory->addFactory("touch", &factory<Operation::TouchData>, Operation::TOUCH_NO);

    objectFactory->addFactory("login", &factory<Operation::LoginData>, Operation::LOGIN_NO);

    objectFactory->addFactory("logout", &factory<Operation::LogoutData>, Operation::LOGOUT_NO);

    objectFactory->addFactory("imaginary", &factory<Operation::ImaginaryData>, Operation::IMAGINARY_NO);

    objectFactory->addFactory("use", &factory<Operation::UseData>, Operation::USE_NO);

    objectFactory->addFactory("info", &factory<Operation::InfoData>, Operation::INFO_NO);

    objectFactory->addFactory("perception", &factory<Operation::PerceptionData>, Operation::PERCEPTION_NO);

    objectFactory->addFactory("sight", &factory<Operation::SightData>, Operation::SIGHT_NO);

    objectFactory->addFactory("appearance", &factory<Operation::AppearanceData>, Operation::APPEARANCE_NO);

    objectFactory->addFactory("disappearance", &factory<Operation::DisappearanceData>, Operation::DISAPPEARANCE_NO);

    objectFactory->addFactory("sound", &factory<Operation::SoundData>, Operation::SOUND_NO);

    objectFactory->addFactory("smell", &factory<Operation::SmellData>, Operation::SMELL_NO);

    objectFactory->addFactory("feel", &factory<Operation::FeelData>, Operation::FEEL_NO);

    objectFactory->addFactory("error", &factory<Operation::ErrorData>, Operation::ERROR_NO);

    objectFactory->addFactory("anonymous", &factory<Entity::AnonymousData>, Entity::ANONYMOUS_NO);

    objectFactory->addFactory("generic", &factory<Operation::GenericData>, Operation::GENERIC_NO);
}
void PixelStreamContent::preRenderUpdate(Factories& factories, ContentWindowManagerPtr window, WallToWallChannel& wallToWallChannel)
{
    const QRectF& windowRect = window->getCoordinates();
    factories.getPixelStreamFactory().getObject(getURI())->preRenderUpdate(windowRect, wallToWallChannel);
}
示例#5
0
PrefsDialog::PrefsDialog
(wxWindow * parent, const wxString &titlePrefix, Factories &factories)
    :  wxDialogWrapper(parent, wxID_ANY, wxString(_("Audacity Preferences")),
                       wxDefaultPosition,
                       wxDefaultSize,
                       wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
    , mFactories(factories)
    , mTitlePrefix(titlePrefix)
{
    wxASSERT(factories.size() > 0);
    const bool uniquePage = (factories.size() == 1);

    ShuttleGui S(this, eIsCreating);

    S.StartVerticalLay(true);
    {
        wxASSERT(factories.size() > 0);
        if (!uniquePage) {
            mCategories = safenew wxTreebookExt(this, wxID_ANY, mTitlePrefix);
            S.StartHorizontalLay(wxALIGN_LEFT | wxEXPAND, true);
            {
                S.Prop(1);
                S.AddWindow(mCategories, wxEXPAND);

                {
                    typedef std::pair<int, int> IntPair;
                    std::vector<IntPair> stack;
                    int iPage = 0;
                    for (Factories::const_iterator it = factories.begin(), end = factories.end();
                            it != end; ++it, ++iPage)
                    {
                        const PrefsNode &node = *it;
                        PrefsPanelFactory &factory = *node.pFactory;
                        wxWindow *const w = factory.Create(mCategories);
                        if (stack.empty())
                            // Parameters are: AddPage(page, name, IsSelected, imageId).
                            mCategories->AddPage(w, w->GetName(), false, 0);
                        else {
                            IntPair &top = *stack.rbegin();
                            mCategories->InsertSubPage(top.first, w, w->GetName(), false, 0);
                            if (--top.second == 0) {
                                // Expand all nodes before the layout calculation
                                mCategories->ExpandNode(top.first, true);
                                stack.pop_back();
                            }
                        }
                        if (node.nChildren > 0)
                            stack.push_back(IntPair(iPage, node.nChildren));
                    }
                }
            }
            S.EndHorizontalLay();
        }
        else {
            // Unique page, don't show the factory
            const PrefsNode &node = factories[0];
            PrefsPanelFactory &factory = *node.pFactory;
            mUniquePage = factory.Create(this);
            S.AddWindow(mUniquePage, wxEXPAND);
        }
    }
    S.EndVerticalLay();

    S.AddStandardButtons(eOkButton | eCancelButton | eApplyButton);
    static_cast<wxButton*>(wxWindow::FindWindowById(wxID_OK, this))->SetDefault();

    if (mUniquePage && !mUniquePage->ShowsApplyButton()) {
        wxWindow *const applyButton =
            wxWindow::FindWindowById(wxID_APPLY, GetParent());
        applyButton->Show(false);
    }

#if defined(__WXGTK__)
    if (mCategories)
        mCategories->GetTreeCtrl()->EnsureVisible(mCategories->GetTreeCtrl()->GetRootItem());
#endif

//   mCategories->SetSizeHints(-1, -1, 790, 600);  // 790 = 800 - (border * 2)
    Layout();
    Fit();
    wxSize sz = GetSize();

    // Collapse nodes only after layout so the tree is wide enough
    if (mCategories)
    {
        int iPage = 0;
        for (Factories::const_iterator it = factories.begin(), end = factories.end();
                it != end; ++it, ++iPage)
            mCategories->ExpandNode(iPage, it->expanded);
    }

    // This ASSERT used to limit us to 800 x 600.
    // However, we think screens have got bigger now, and that was a bit too restrictive.
    // The impetus for increasing the limit (before we ASSERT) was that this ASSERT
    // was firing with wxWidgets 3.0, which has slightly different sizer behaviour.
    wxASSERT_MSG(sz.x <= 1000 && sz.y <= 750, wxT("Preferences dialog exceeds max size"));

    if (sz.x > 800) {
        sz.x = 800;
    }

    if (sz.y > 600) {
        sz.y = 600;
    }

    // Set the minimum height to be slightly bigger than default, as fix for bug 161.
    // The magic number 7 was determined by Ed's experimentation.
    // Frankly, this is a hack to work around a bug in wxTreebook, and
    // will have to be revisited if we add another category to mCategories.
    // JKC later added a category and 20 onto the 7.
    sz.y += 7 + 20;
    SetSize(sz);
    SetMinSize(sz);

    // Center after all that resizing, but make sure it doesn't end up
    // off-screen
    CentreOnParent();
}
 void add_factory(const char* name)
 {
   assert(factories.find(name) == factories.end());
   factories[name] = std::unique_ptr<AbstractObjectFactory>(new ConcreteObjectFactory<C>());
 }