void WMemoryMap::updateRowGroupDataWidgets(RowGroup &rg, MemoryMap::NodeIterator mmNode) { ASSERT_require(mmNode != memoryMap_.nodes().end()); const AddressInterval &interval = mmNode->key(); ASSERT_forbid(interval.isEmpty()); ASSERT_require(rg.segmentVa == interval.least()); rg.wSplit->setHidden(!isEditable_ || rg.editingColumn==SplitColumn || !canSplit(rg, mmNode)); rg.wMerge->setHidden(!isEditable_ || rg.editingColumn==MergeColumn || !canMerge(rg, mmNode)); rg.wLeastVa->setText(StringUtility::addrToString(interval.least())); rg.wGreatestVa->setText(StringUtility::addrToString(interval.greatest())); if (interval.isWhole()) { rg.wSize->setText("whole"); // since size would overflow back to zero } else { rg.wSize->setText(StringUtility::addrToString(interval.size())); } const MemoryMap::Segment &segment = mmNode->value(); rg.wReadable->setChecked(0 != (segment.accessibility() & MemoryMap::READABLE)); rg.wWritable->setChecked(0 != (segment.accessibility() & MemoryMap::WRITABLE)); rg.wExecutable->setChecked(0 != (segment.accessibility() & MemoryMap::EXECUTABLE)); rg.wName->setText(StringUtility::cEscape(segment.name())); }
void Map::expand(MapNode *node){ unsigned int x, y; if(canSplit(node,x,y)){ if((x>ROOM_MAX+2) && (y>ROOM_MAX+2)){ //pick a split and do it if(mapRNG->getInt(0,9) > 4) splitX(node); else splitY(node); }else if(y > ROOM_MAX+2){ splitY(node); }else{ splitX(node); } }else return; }
void WMemoryMap::updateRowGroupEditWidgets(RowGroup &rg, MemoryMap::NodeIterator mmNode) { if (isEditable_) { rg.wDelete->setHidden(rg.editingColumn==DeleteColumn); rg.wMove->setHidden(rg.editingColumn==MoveColumn); rg.wSplit->setHidden(rg.editingColumn==SplitColumn || !canSplit(rg, mmNode)); rg.wMerge->setHidden(rg.editingColumn==MergeColumn || !canMerge(rg, mmNode)); rg.wReadable->setEnabled(true); rg.wWritable->setEnabled(true); rg.wExecutable->setEnabled(true); switch (rg.editingColumn) { case ZeroColumn: rg.wEditStack->hide(); break; case DeleteColumn: rg.wEditStack->setCurrentWidget(rg.wDeleteConfirm); rg.wEditStack->show(); break; case MoveColumn: rg.wEditStack->setCurrentWidget(rg.wMoveSegment); rg.wEditStack->show(); break; case MergeColumn: rg.wEditStack->setCurrentWidget(rg.wMergeConfirm); rg.wEditStack->show(); break; case SplitColumn: case LeastVaColumn: case GreatestVaColumn: case SizeColumn: rg.wEditStack->setCurrentWidget(rg.wHexValueEdit); rg.wEditStack->show(); break; default: ASSERT_not_reachable("don't know how to edit column " + StringUtility::numberToString(rg.editingColumn)); } } else { rg.wDelete->hide(); rg.wMove->hide(); rg.wSplit->hide(); rg.wMerge->hide(); rg.wReadable->setEnabled(false); rg.wWritable->setEnabled(false); rg.wExecutable->setEnabled(false); } }