ActionTable* UnwrapClassDesc::GetActions() { TSTR name = GetString(IDS_RB_UNWRAPMOD); ActionTable* pTab; pTab = new ActionTable(kUnwrapActions, kUnwrapContext, name); int numOps = NumElements(spActions)/3; UnwrapAction *wtActions = NULL; int ct = 0; for (int i =0; i < numOps; i++) { wtActions = new UnwrapAction(); int id, ids1, ids2; id = spActions[ct++]; ids1 = spActions[ct++]; ids2 = spActions[ct++]; wtActions->Init(id,GetString(ids1),GetString(ids2), GetString(IDS_RB_UNWRAPMOD), GetString(IDS_RB_UNWRAPMOD) ); pTab->AppendOperation(wtActions); } GetCOREInterface()->GetActionManager()->RegisterActionContext(kUnwrapContext, name.data()); return pTab; }
void UnwrapMod::ActivateActionTable() { pCallback = new UnwrapActionCallback(); pCallback->SetUnwrap(this); if (GetCOREInterface()->GetActionManager()->ActivateActionTable(pCallback, kUnwrapActions) ) { ActionTable *actionTable = GetCOREInterface()->GetActionManager()->FindTable(kUnwrapActions); if (actionTable) { int actionCount = NumElements(spActions)/3; for (int i =0; i < actionCount; i++) { int id = spActions[i*3]; UnwrapAction *action = (UnwrapAction *) actionTable->GetAction(spActions[i*3]); if (action) { action->SetUnwrap(this); } } } } }
void WeightTableWindow::ActivateActionTable() { if (pCallback) DeActivateActionTable(); pCallback = new WeightTableActionCallback(); pCallback->SetWeightTable(this); if (GetCOREInterface()->GetActionManager()->ActivateActionTable(pCallback, kWeightTableActions) ) { ActionTable *actionTable = GetCOREInterface()->GetActionManager()->FindTable(kWeightTableActions); if (actionTable) { for (int i =0; i < actionCount; i++) { WeightTableAction *action = (WeightTableAction *) actionTable->GetAction(actionIDs[i]); if (action) { action->SetWeightTable(this); } } } } }
void AddPlasmaExportMenu() { IMenuManager* pMenuMan = GetCOREInterface()->GetMenuManager(); IMenu* fileMenu = pMenuMan->FindMenu("&File"); int i; bool plasmaExportFound = false; // Make sure our action isn't already in the menu TSTR ourName = GetString(IDS_PLASMA_EXPORT); for (i = 0; i < fileMenu->NumItems(); i++) { IMenuItem* fileMenuItem = fileMenu->GetItem(i); const TSTR& title = fileMenuItem->GetTitle(); if (title == ourName) plasmaExportFound = true; // KLUDGE - MaxAss didn't define the file submenu with an accelerator. // This fixes it. if (title == (CStr)"MAX File Operations") { fileMenuItem->SetUseCustomTitle(true); bool custom = fileMenuItem->GetUseCustomTitle(); fileMenuItem->SetTitle("MAX File Opera&tions"); pMenuMan->UpdateMenuBar(); } } if (!plasmaExportFound) { // Menu item isn't there, add it for (i = 0; i < fileMenu->NumItems(); i++) { IMenuItem* fileMenuItem = fileMenu->GetItem(i); const TSTR& title = fileMenuItem->GetTitle(); // We want to add it after the "Export Selected" menu item if (title == (CStr)"Export Selected...") { ActionTable* pActionTable = GetCOREInterface()->GetActionManager()->FindTable(kActionId); if (!pActionTable) { hsAssert(0, "Action table not found"); return; } IMenuItem* menuItem = GetIMenuItem(); menuItem->SetActionItem(pActionTable->GetAction(kActionExport)); fileMenu->AddItem(menuItem, i+1); pMenuMan->UpdateMenuBar(); return; } } } }
bool SyntaxParserImpl::parse() { vector<YYSTYPE> valueStack; vector<int> stateStack; stateStack.push_back(0); GotoTable *gotoTable = LALRParser::instance()->getGotoTable(); ActionTable* actionTable = LALRParser::instance()->getActionTable(); bool useLastToken = false; Token t; for (;;) { if (!m_scanner->getNext(t)) { if (useLastToken) break; else { useLastToken = true; t.type = ESS_Term_Begin; } } for (;;) { Action act = actionTable->getAction(stateStack.back(), t.type); if (act.type == Action::T_Shift) { if (t.type == ESS_Term_Begin) { stateStack.clear(); break; } stateStack.push_back(act.value); valueStack.push_back(yylval); break; } else if (act.type == Action::T_Reduce) { auto& body = getProductBody(act.value); YYSTYPE head; g_lrproductionHead = &head; g_lrproductionBody = body.empty() ? &head : &valueStack[valueStack.size() - body.size()]; getProductionAction(act.value)(); valueStack.erase(valueStack.end() - body.size(), valueStack.end()); valueStack.push_back(head); stateStack.erase(stateStack.end() - body.size(), stateStack.end()); int nstate = gotoTable->getNextState(stateStack.back(), getProductHead(act.value)); stateStack.push_back(nstate); } else ASSERT(0); } } ASSERT(stateStack.empty()); return true; }
void WeightTableWindow::DeActivateActionTable() { ActionTable *actionTable = GetCOREInterface()->GetActionManager()->FindTable(kWeightTableActions); if (actionTable) { for (int i =0; i < actionCount; i++) { WeightTableAction *action = (WeightTableAction *) actionTable->GetAction(actionIDs[i]); if (action) { action->SetWeightTable(NULL); } } } GetCOREInterface()->GetActionManager()->DeactivateActionTable(pCallback, kWeightTableActions); delete pCallback; pCallback = NULL; }
//action Table methods void UnwrapMod::DeActivateActionTable() { ActionTable *actionTable = GetCOREInterface()->GetActionManager()->FindTable(kUnwrapActions); if (actionTable) { int actionCount = NumElements(spActions)/3; for (int i =0; i < actionCount; i++) { UnwrapAction *action = (UnwrapAction *) actionTable->GetAction(spActions[i*3]); if (action) { action->SetUnwrap(NULL); } } } if (pCallback) { GetCOREInterface()->GetActionManager()->DeactivateActionTable(pCallback, kUnwrapActions); delete pCallback; pCallback = NULL; } }
void plCreateMenu() { #if MAX_VERSION_MAJOR <= 11 AddPlasmaExportMenu(); #endif IMenuManager* pMenuMan = GetCOREInterface()->GetMenuManager(); bool newlyRegistered = pMenuMan->RegisterMenuBarContext(kMyMenuContextId, kMenuName); // Is the Max menu version the most recent? bool wrongVersion = GetPrivateProfileIntW(L"Menu", L"Version", 0, plMaxConfig::GetPluginIni().WideString().data()) < kMenuVersion; if (wrongVersion) { // Delete the old version of the menu IMenu *oldMenu = pMenuMan->FindMenu(kMenuName); if (oldMenu) pMenuMan->UnRegisterMenu(oldMenu); // Update the menu version wchar_t buf[12]; snwprintf(buf, arrsize(buf), L"%d", kMenuVersion); WritePrivateProfileStringW(L"Menu", L"Version", buf, plMaxConfig::GetPluginIni().WideString().data()); } if (wrongVersion || newlyRegistered) { IMenu *pMainMenu = pMenuMan->GetMainMenuBar(); if (!pMainMenu) { hsAssert(0, "Main menu not found"); return; } // Get our action table ActionTable* pActionTable = GetCOREInterface()->GetActionManager()->FindTable(kActionId); if (!pActionTable) { hsAssert(0, "Action table not found"); return; } // Create the Plasma menu IMenu* pPlasmaMenu = GetIMenu(); pPlasmaMenu->SetTitle(kMenuName); // Register the new menu with the system pMenuMan->RegisterMenu(pPlasmaMenu, 0); ///////////////////////////////////////////////// // Add the menu items // IMenuItem* pMenuItem; #if MAX_VERSION_MAJOR >= 12 // Add the export action to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionExport)); pPlasmaMenu->AddItem(pMenuItem); #endif // Add the save selected action to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionSaveSel)); pPlasmaMenu->AddItem(pMenuItem); // Add the merge action to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionMerge)); pPlasmaMenu->AddItem(pMenuItem); // Add the component copy action to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionCompCopy)); pPlasmaMenu->AddItem(pMenuItem); // Add a separator pMenuItem = GetIMenuItem(); pMenuItem->ActAsSeparator(); pPlasmaMenu->AddItem(pMenuItem); // Add the component manager to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionComponent)); pPlasmaMenu->AddItem(pMenuItem); // Add the resource collector to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionResCollect)); pPlasmaMenu->AddItem(pMenuItem); // Add the texture search to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionTexSearch)); pPlasmaMenu->AddItem(pMenuItem); // Add the age description to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionAgeDesc)); pPlasmaMenu->AddItem(pMenuItem); // Add a separator pMenuItem = GetIMenuItem(); pMenuItem->ActAsSeparator(); pPlasmaMenu->AddItem(pMenuItem); // Add the Lock Selected to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionLock)); pPlasmaMenu->AddItem(pMenuItem); // Add the Unlock Selected to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionUnlock)); pPlasmaMenu->AddItem(pMenuItem); // Add the Reset Selected to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionReset)); pPlasmaMenu->AddItem(pMenuItem); // Add the SelectNonRenderables to the menu pMenuItem = GetIMenuItem(); pMenuItem->SetActionItem(pActionTable->GetAction(kActionSelectNonRenderables)); pPlasmaMenu->AddItem(pMenuItem); // Create a new menu item to hold the sub-menu IMenuItem* pSubMenuItem1 = GetIMenuItem(); //menu in menu bar... pSubMenuItem1->SetSubMenu(pPlasmaMenu); pMainMenu->AddItem(pSubMenuItem1); pMenuMan->UpdateMenuBar(); // Save the dang menu, in case Max crashes const char *uiDir = GetCOREInterface()->GetDir(APP_UI_DIR); char path[MAX_PATH]; sprintf(path, "%s\\%s", uiDir, "MaxMenus.mnu"); pMenuMan->SaveMenuFile(path); } }
ActionTable* GetEditPolyActions() { TSTR name = GetString (IDS_EDITPOLY_EDIT_POLY); HACCEL hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE (IDR_ACCEL_EPOLY)); ActionTable* pTab = NULL; pTab = new ActionTable (kEditPolyActionID, kEditPolyActionID, name, hAccel, kNumEPolyActions, epolyActions, hInstance); GetCOREInterface()->GetActionManager()->RegisterActionContext (kEditPolyActionID, name.data()); IActionItemOverrideManager *actionOverrideMan = static_cast<IActionItemOverrideManager*>(GetCOREInterface(IACTIONITEMOVERRIDEMANAGER_INTERFACE )); if(actionOverrideMan) { //register the action items TSTR desc; ActionItem *item = pTab->GetAction(ID_EP_SEL_LEV_OBJ); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } /* Kelcey said don't do these guys only the object.. leave in case she changes her mind.. item = pTab->GetAction(ID_EP_SEL_LEV_VERTEX); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SEL_LEV_EDGE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SEL_LEV_BORDER); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SEL_LEV_FACE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SEL_LEV_ELEMENT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } */ //command overrides item = pTab->GetAction(ID_EP_EDIT_CUT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //new edit soft selection mode item = pTab->GetAction(ID_EP_EDIT_SS); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_EDIT_QUICKSLICE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } /* item = pTab->GetAction(ID_EP_EDIT_SLICEPLANE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } */ //face command mdoes item = pTab->GetAction(ID_EP_SUB_BEVEL); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SUB_OUTLINE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SUB_INSET); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SUB_HINGE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //less than edge item = pTab->GetAction(ID_EP_SUB_WELD); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //greater edge item = pTab->GetAction(ID_EP_TURN); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } item = pTab->GetAction(ID_EP_SURF_EDITTRI); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //chamfer item = pTab->GetAction(ID_EP_SUB_CHAMFER); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //create item = pTab->GetAction(ID_EP_EDIT_CREATE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //insert item = pTab->GetAction(ID_EP_SUB_INSERTVERT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //bridge item = pTab->GetAction(ID_EP_SUB_BRIDGE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //extrude item = pTab->GetAction(ID_EP_SUB_EXTRUDE); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //none constrain item = pTab->GetAction(ID_EP_NONE_CONSTRAINT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //normal constrain item = pTab->GetAction(ID_EP_NORMAL_CONSTRAINT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //edge constrain item = pTab->GetAction(ID_EP_EDGE_CONSTRAINT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //face constrain item = pTab->GetAction(ID_EP_FACE_CONSTRAINT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //paint item = pTab->GetAction(ID_EP_SS_PAINT); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //paint push/pull item = pTab->GetAction(ID_EP_SS_PAINTPUSHPULL); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } //paint relax item = pTab->GetAction(ID_EP_SS_PAINTRELAX); if(item) { item->GetDescriptionText(desc); actionOverrideMan->RegisterActionItemOverride(item,desc); } } return pTab; }
void LALRParser::build() { LR0ItemCollectionFamily LR0Family; LR0Family.build(); map<LR1Point, set<int> > point2Terms; map<LR1Point, set<LR1Point> > point2Points; set<LR1Point> unhandled; for (int state = 0; state < (int)LR0Family.ID2Collection.size(); ++state) { for (auto item : LR0Family.ID2Collection[state]) { LR1Point pt0(state, item.productID, item.pos); LR1ItemCollection col; closureLR1Item(LR1Item(item.productID, item.pos, ESS_Term_End), col); for (auto _item : col) { if (isImportantLR0Item(_item.productID, _item.pos)) { LR1Point pt1(state, _item.productID, _item.pos); if (_item.term == ESS_Term_End) { point2Points[pt0].insert(pt1); } else { point2Terms[pt1].insert(_item.term); unhandled.insert(pt1); } auto &body = getProductBody(_item.productID); if (_item.pos >= body.size()) continue; LR1Point pt2(LR0Family.transMap[state][body[_item.pos]], _item.productID, _item.pos + 1); point2Points[pt1].insert(pt2); } else { auto &body = getProductBody(_item.productID); if (_item.pos >= body.size()) continue; LR1Point pt2(LR0Family.transMap[state][body[_item.pos]], _item.productID, _item.pos + 1); if (_item.term == ESS_Term_End) { point2Points[pt0].insert(pt2); } else { point2Terms[pt2].insert(_item.term); unhandled.insert(pt2); } } } } } while (!unhandled.empty()) { LR1Point point = *unhandled.begin(); unhandled.erase(unhandled.begin()); auto& terms = point2Terms[point]; for (auto ditem : point2Points[point]) { auto& dterms = point2Terms[ditem]; auto osize = dterms.size(); dterms.insert(terms.begin(), terms.end()); if (dterms.size() != osize) { unhandled.insert(ditem); } } } m_gotoTable.setStateCount((int)LR0Family.ID2Collection.size()); m_actionTable.setStateCount((int)LR0Family.ID2Collection.size()); for (int state = 0; state < (int)LR0Family.ID2Collection.size(); ++state) { for (auto term : g_termList) { Action act; { auto &m = LR0Family.transMap[state]; if (m.count(term)) { mergeAction(act, Action(Action::T_Shift, m[term]), LR0Family); } } for (auto item : LR0Family.ID2Collection[state]) { auto& body = getProductBody(item.productID); if (item.pos != body.size()) continue; auto& terms = point2Terms[LR1Point(state, item.productID, item.pos)]; if (terms.count(term) == 0) continue; mergeAction(act, Action(Action::T_Reduce, item.productID), LR0Family); } m_actionTable.setAction(state, term, act); } for (auto nonTerm : g_nonTermList) { auto &m = LR0Family.transMap[state]; if (m.count(nonTerm)) { m_gotoTable.setNextState(state, nonTerm, m[nonTerm]); } } } }