void SaveAsPanel::handleButtonPressed(Button* button, Button::ActivationVariant variant) { if (button == saveButton) { String utf8FileName = editField->getTextData()->getAsString(); String newFileName = EncodingConverter::convertUtf8ToLocaleStringIgnoreErrors(utf8FileName); RawPtr<TextData> textData = editorWidget->getTextData(); if (textData->isFileNamePseudo() || textData->getFileName() != newFileName) { File::Info newFile = File(newFileName).getInfo(); if (newFile.exists()) { if (newFile.isFile() && newFile.isWritable()) { messageBoxInvoker->call(MessageBoxParameter() .setTitle("File exists") .setMessage(String() << "File '" << utf8FileName << "' exists.") .setDefaultButton("S]ave", newCallback(this, &SaveAsPanel::continueSave)) .setCancelButton("Ca]ncel")); } else if (!newFile.isFile()) { messageBoxInvoker->call(MessageBoxParameter() .setTitle("Not a file") .setMessage(String() << "'" << utf8FileName << "' exists and is not a file.")); } else if (!newFile.isWritable()) { messageBoxInvoker->call(MessageBoxParameter() .setTitle("Not writable") .setMessage(String() << "'" << utf8FileName << "' exists and is not writable.")); } else { ASSERT(false); } } else { continueSave(); } } else { continueSave(); } } else if (button == cancelButton) { requestClose(); } }
virtual void handleSaveKey() { try { RawPtr<TextData> textData = editorTopWin->textData; if (textData->isFileNamePseudo()) { editorTopWin->invokeSaveAsPanel(newCallback(this, &ActionInterface::handleSaveKey)); } else { editorTopWin->save(); } } catch (...) { editorTopWin->handleCatchedException(); } }
void SaveAsPanel::show() { RawPtr<TextData> textData = editorWidget->getTextData(); String newContent; if (textData->isFileNamePseudo()) { String dirName = File(textData->getFileName()).getDirName(); newContent = String() << EncodingConverter::convertLocaleToUtf8StringIgnoreErrors(dirName) << "/"; } else { String absName = File(textData->getFileName()).getAbsoluteName(); newContent = EncodingConverter::convertLocaleToUtf8StringIgnoreErrors(absName); } editField->getTextData()->setToString(newContent); editField->getTextData()->clearHistory(); editField->setCursorPosition(newContent.getLength()); setFocus(editField); DialogPanel::show(); }