void ROOM_SPACE::DeleteOwner(People& p) { ePipeline& OwnerInfo = GetOwnerInfo(); ePipeline& OwnerList = *(ePipeline*)OwnerInfo.GetData(REG_OWNER_LIST); for (int i=0; i<OwnerInfo.Size();i++) { ePipeline* Owner = (ePipeline*)OwnerList.GetData(i); tstring& Cryptograph = *(tstring*)Owner->GetData(2); if (Cryptograph == p.m_Cryptograhp) { OwnerList.EraseEnergy(i,1); return ; } } if(p.GetParentID() == GetSpaceID()){ p.GoOut(); //这里应该有更多处理,p被赶出此空间,那么应该退回到上一个空间 assert(0); return; } }
void People::GoOut(){ if(IsValid()){ int64 ParentID = GetParentID(); int64 ChildID = GetSpaceID(); DeleteChild(ParentID,ChildID); m_ID = -1; } }
void CSpace::UpdateProperty(){ if(!IsValid())return; AnsiString Property; GetProperty().ToString(Property); int64 ParentID = GetParentID(); int64 ChildID = GetSpaceID(); CppSQLite3Buffer SQL; char ParentName[30], ChildName[30]; int64toa(ParentID,ParentName); int64toa(ChildID,ChildName); SQL.format("update \"%s\" set %s=\"%s\" where %s = \"%s\" ;", ParentName, ITEM_OWNER, Property.c_str(), ITEM_ID, ChildName ); GetWorldDB().execDML(SQL); };
/*----------------------------------------------------------------------* | InvokeCommand | *----------------------------------------------------------------------*/ void InvokeCommand ( Widget w, Atom target, MessageData data, unsigned long len, int fmt) { CARD32 commandID; Window windowID; WorkWindow *w_window; CommandSpace *cs; commandID = UnpackCARD32(&data); windowID = UnpackCARD32(&data); PRINT("commandID = %d\n",commandID); PRINT("windowID = %d\n", windowID); if (commandID == show_id) { if (wsm_shown) { PRINT("hide workspace manager\n"); HideWsm(); } else { PRINT("show workspace manager\n"); ShowWsm(); } } else if (commandID == occupy_id) { PRINT("copy window\n"); w_window = GetWorkWindow(windowID); if (w_window != NULL) CreateOccupy(w_window); } else if (commandID == copy_all_id) { PRINT("copy window\n"); w_window = GetWorkWindow(windowID); if (w_window != NULL) CopyWindow(w_window,current_space,all_space); } else if (commandID == link_all_id) { PRINT("copy window\n"); w_window = GetWorkWindow(windowID); if (w_window != NULL) LinkWindow(w_window,current_space,all_space); } else if (commandID == remove_id) { PRINT("remove id\n"); w_window = GetWorkWindow(windowID); if (w_window != 0) { if (w_window->s_list->next != NULL && w_window->window != None && _WSMGetConfigFormatType(w_window->window) != WSM_ICON_FMT) DeleteWindow(w_window,current_space); } } else if ((cs = GetCSFromSwitchID(commandID)) != NULL) { PRINT("SendLeaveRoom(%s)\n",cs->space->name); XmToggleButtonSetState(wsm_ui->space_button[GetSpaceID(cs->space)],True,True); } else if ((cs = GetCSFromCopyID(commandID)) != NULL) { PRINT("copy space"); w_window = GetWorkWindow(windowID); if (w_window != NULL) { PRINT(" %s\n",cs->space->name); CopyWindow(w_window,current_space, cs->space); } } else if ((cs = GetCSFromLinkID(commandID)) != NULL) { PRINT("link space"); w_window = GetWorkWindow(windowID); if (w_window != NULL) { PRINT(" %s\n",cs->space->name); LinkWindow(w_window,current_space, cs->space); } } }
void CSpace::UpdateAll(BOOL bInsertNew){ if(!IsValid())return ; int64 ParentID = m_ID; AnsiString Name; Name = WStoUTF8(GetName()); int64 ChildID = GetSpaceID(); if (bInsertNew) { if(ChildID== -1){ ChildID = AbstractSpace::CreateTimeStamp(); } } SPACETYPE Type = GetSpaceType(); AnsiString Fingerprint = WStoUTF8(GetFingerprint()); AnsiString Property; GetProperty().ToString(Property); AnsiString OwnerInfo; GetOwnerInfo().ToString(OwnerInfo); CppSQLite3Buffer SQL; char ParentName[30], ChildName[30]; int64toa(ParentID,ParentName); int64toa(ChildID,ChildName); if (bInsertNew) { if (!HasTable(ParentID)) { CreateTable(ParentID); } SQL.format(" insert into \"%s\" values(\"%s\",\"%s\",%d,\"%s\",\"%s\" ,\"%s\");", ParentName, ChildName, Name.c_str(), Type, Fingerprint.c_str(), Property.c_str(), OwnerInfo.c_str() ); }else{ SQL.format("update \"%s\" set %s=\"%s\" %s=%d %s=\"%s\" %s=\"%s\" %s=\"%s\" where %s = \"%s\" ;", ParentName, ITEM_NAME, Name.c_str(), ITEM_TYPE, Type, ITEM_FINGERPRINT, Fingerprint.c_str(), ITEM_PROPERTY, Property.c_str(), ITEM_OWNER, OwnerInfo.c_str(), ITEM_ID, ChildName ); } GetWorldDB().execDML(SQL); };
SpaceAddress CSpace::GetAddress(){ assert(IsValid()); return SpaceAddress(GetParentID(),GetSpaceID()); };