Module *Module::copy() { Module *module = copyModule(); module->setWidth(width); module->setHeight(height); module->setXStart(xStart); module->setYStart(yStart); module->setName(name); initializeRectangleOfRectangularModule(); for (int i = 0; i < rectangles->size(); ++i) { module->addRectangle(rectangles->at(i)->copy()); } for (int i = 0; i < pins->size(); ++i) { module->addPin(pins->at(i)->copy()); } return module; }
void UndoDiagramModuleCutActionFn(void *info) { TransformNode *dgmNode = ((UndoDiagramModuleCut *)info)->mpDiagramNode; CDiagramClipboard *clipboard = ((UndoDiagramModuleCut *)info)->mpClipboard; CDiagram dgm(dgmNode); int nModule = clipboard->getNModuleNodes(); ScriptNode* (*moduleNode)[2] = new (ScriptNode *[nModule][2]); for (int n=0; n<nModule; n++) { CModule orgModule(clipboard->getModuleNode(n)); CModule copyModule(orgModule.getModuleType()); copyModule.setPositionX(orgModule.getPositionX()); copyModule.setPositionY(orgModule.getPositionY()); dgm.addModule(©Module); moduleNode[n][0] = orgModule.getScriptNode(); moduleNode[n][1] = copyModule.getScriptNode(); } int nRoute = clipboard->getNRoutes(); for (n=0; n<nRoute; n++) { Route *route = clipboard->getRoute(n); ScriptNode *outModule = (ScriptNode *)route->getEventOutNode(); for (int i=0; i<nModule; i++) { if (moduleNode[i][0] == outModule) { outModule = moduleNode[i][1]; break; } } ScriptNode *inModule = (ScriptNode *)route->getEventInNode(); for (i=0; i<nModule; i++) { if (moduleNode[i][0] == inModule) { inModule = moduleNode[i][1]; break; } } GetWorld()->getSceneGraph()->addRoute(outModule->getName(), route->getEventOutField()->getName(), inModule->getName(), route->getEventInField()->getName()); } delete []moduleNode; delete clipboard; }
int CloneContact(HANDLE hContact) { HANDLE newContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0); if (!newContact) return 0; // enum all the modules ModuleSettingLL modlist; if (!EnumModules(&modlist)) { msg(Translate("Error Loading Module List"), modFullname); return 0; } ModSetLinkLinkItem *mod = modlist.first; while (mod) { copyModule(mod->name, hContact, newContact); mod = (ModSetLinkLinkItem *)mod->next; } FreeModuleSettingLL(&modlist); return 1; }
INT_PTR CALLBACK copyModDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { ModuleAndContact *mac = (ModuleAndContact *)GetWindowLongPtr(hwnd,GWLP_USERDATA); if (msg == WM_INITDIALOG) { int index, loaded; char szProto[256]; for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (GetValue(hContact,"Protocol","p",szProto,SIZEOF(szProto))) loaded = IsProtocolLoaded(szProto); else loaded = 0; // filter if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) continue; // contacts name DBVARIANT dbv ={0}; WCHAR nick[256]; WCHAR protoW[256]; // unicode proto if (szProto[0]) a2u(szProto, protoW, SIZEOF(protoW)); else protoW[0] = 0; if (!szProto[0] || !loaded) { if (protoW) { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s %s", protoW, GetContactName(hContact, szProto, 1), L"(UNLOADED)"); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s) %s", GetContactName(hContact, szProto, 1), protoW, L"(UNLOADED)"); } else wcscpy(nick, nick_unknownW); } else { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s", protoW, GetContactName(hContact, szProto, 1)); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s)", GetContactName(hContact, szProto, 1), protoW); } index = SendMessageW(GetDlgItem(hwnd, IDC_CONTACTS), CB_ADDSTRING, 0, (LPARAM)nick); SendMessageW(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETITEMDATA, index, hContact); } index = (int)SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_INSERTSTRING, 0, (LPARAM)(char*)Translate("Settings")); SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETITEMDATA, index, 0); SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETCURSEL, index, 0); SetWindowLongPtr(hwnd,GWLP_USERDATA,lParam); TranslateDialogDefault(hwnd); } else if (msg == WM_COMMAND) { switch(LOWORD(wParam)) { case CHK_COPY2ALL: EnableWindow(GetDlgItem(hwnd, IDC_CONTACTS),!IsDlgButtonChecked(hwnd,CHK_COPY2ALL)); break; case IDOK: if (!IsDlgButtonChecked(hwnd,CHK_COPY2ALL)) { MCONTACT hContact = (MCONTACT)SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_GETITEMDATA, SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_GETCURSEL, 0, 0), 0); copyModule(mac->module, mac->hContact, hContact); } else { SetCursor(LoadCursor(NULL,IDC_WAIT)); for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) copyModule(mac->module, mac->hContact, hContact); SetCursor(LoadCursor(NULL,IDC_ARROW)); } mir_free(mac); refreshTree(1); DestroyWindow(hwnd); break; case IDCANCEL: mir_free(mac); DestroyWindow(hwnd); break; } } return 0; }