void MFXEditableTable::editEnd() { if (!myEditedItem) { return; } FXTableItem* item = myEditedItem; myEditedItem = NULL; myEditor->hide(); setFocus(); FXString text = myEditor->getText(); myEditedItem = 0; if (item->getText() == text) { return; } if (handle(item, FXSEL(SEL_COMMAND, ID_EDITEND), &text)) { item->setText(text); handle(this, FXSEL(SEL_CHANGED, 0), item); } killSelection(true); if (target) { MFXEditedTableItem edited; edited.item = item; edited.row = myEditedRow; edited.col = myEditedCol; if (!target->handle(this, FXSEL(SEL_CHANGED, ID_TEXT_CHANGED), (void*) &edited)) { item->setText(myPreviousText); } } }
void MFXEditableTable::editItem(FXTableItem* item, FXint how) { if (item == 0) { editEnd(); return; } if (myWriteProtectedCols.find(myEditedCol) != myWriteProtectedCols.end()) { editEnd(); return; } FXTableItem* it = item; myPreviousText = item->getText(); FXint x = getColumnX(myEditedCol) + getRowHeader()->getWidth() + xpos; FXint y = getRowY(myEditedRow) + getColumnHeader()->getHeight() + ypos; FXIcon* icon = item->getIcon(); if (icon) { x += icon->getWidth() + 4; } FXint vw = getViewportWidth(); if (vertical->shown()) { vw -= vertical->getWidth(); } if (vw > getColumnWidth(myEditedCol)) { vw = getColumnWidth(myEditedCol) + x; } myEditor->setText(it->getText()); myEditor->move(x, y); myEditor->resize(vw - x + 1, getRowHeight(myEditedRow) + 1); myEditor->show(); myEditor->raise(); myEditor->setFocus(); if (how == 'I') { myEditor->killSelection(); myEditor->setCursorPos(0); } else if (how == 'A') { myEditor->killSelection(); myEditor->setCursorPos(myEditor->getText().length()); } else { myEditor->selectAll(); } myEditedItem = it; }