📄 textedit.cpp
字号:
setFontSize(variableFontSize,zoomOutLast); zin->setEnabled(zinE); zout->setEnabled(zoutE); }}void TextEdit::clipboardChanged(){ pasteAction->setEnabled( !qApp->clipboard()->text().isEmpty() );}void TextEdit::linkChanged( const QString &linkfile ){ if ( doc ) { DocLnk dl( linkfile ); if ( doc->linkFileKnown() && doc->linkFile() == linkfile || doc->fileKnown() && (doc->file() == linkfile || dl.isValid() && dl.file() == doc->file()) ) { if ( !QFile::exists(doc->file()) && !QFile::exists(doc->linkFile()) ) { // deleted fileRevert(); } else { if ( doc->name() != dl.name() ) updateCaption(dl.name()); *doc = dl; } } }}void TextEdit::fileNew(){ save(); newFile(DocLnk());}void TextEdit::fileOpen(){ if ( !save() ) { QMessageBox box( tr( "Out of space"), tr( "<qt>Text Editor was unable to " "save your changes. " "Free some space and try again." "<br>Continue anyway?</qt>" ), QMessageBox::Critical, QMessageBox::Yes|QMessageBox::Escape, QMessageBox::No|QMessageBox::Default, QMessageBox::Cancel, this); box.setButtonText(QMessageBox::Cancel, tr("Cleanup")); switch(box.exec()){ case QMessageBox::Yes: delete doc; doc = 0; break; case QMessageBox::No: return; break; case QMessageBox::Cancel: ServiceRequest req( "CleanupWizard", "showCleanupWizard()"); req.send(); return; break; } }#ifndef QTOPIA_PHONE menu->hide(); editBar->hide();#endif if (searchBar) searchBar->hide(); editorStack->raiseWidget( fileSelector ); updateCaption();}void TextEdit::fileRevert(){#ifdef QTOPIA_PHONE if( wasCreated ) doc->removeFiles(); else { if( editor->edited() && saved ) { FileManager fm; fm.saveFile( *doc, backup ); } }#endif clear();#ifdef QTOPIA_PHONE if( qCopActivated ) { close(); canceled = TRUE; } else fileOpen();#else fileOpen();#endif}void TextEdit::editCut(){#ifndef QT_NO_CLIPBOARD if( qApp->focusWidget() == editor ) editor->cut(); else if( qApp->focusWidget() == searchEdit ) searchEdit->cut();#endif}void TextEdit::editCopy(){#ifndef QT_NO_CLIPBOARD if( qApp->focusWidget() == editor ) editor->copy(); else if( qApp->focusWidget() == searchEdit ) searchEdit->copy();#endif}void TextEdit::editPaste(){#ifndef QT_NO_CLIPBOARD if( qApp->focusWidget() == editor ) editor->paste(); else if( qApp->focusWidget() == searchEdit ) searchEdit->paste();#endif}void TextEdit::editFind(bool s){ if ( !searchBar ) { searchBar = new QToolBar(this); addToolBar( searchBar, tr("Search"), QMainWindow::Top, TRUE ); searchBar->setHorizontalStretchable( TRUE ); searchEdit = new QLineEdit( searchBar, "searchEdit" ); searchBar->setStretchableWidget( searchEdit ); connect( searchEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( search() ) ); connect( searchEdit, SIGNAL(returnPressed()), this, SLOT(searchNext()));#ifndef QTOPIA_PHONE QAction *a = new QAction( tr( "Find Next" ), Resource::loadIconSet( "next" ), QString::null, 0, this, 0 ); connect( a, SIGNAL(activated()), this, SLOT(search()) ); a->setWhatsThis( tr("Find the next occurrence of the search text.") ); a->addTo( searchBar );#else findTb = new QToolButton(Resource::loadIconSet( "next" ), tr( "Find Next" ), QString::null, this, SLOT(search()), searchBar);#endif } if ( s ) { searchBar->show(); searchVisible = TRUE; searchEdit->setFocus();#ifdef QTOPIA_PHONE if( !Global::mousePreferred() ) { if (!searchEdit->isModalEditing()) searchEdit->setModalEditing(TRUE); }#endif } else { searchVisible = FALSE;#ifdef QTOPIA_PHONE if( !Global::mousePreferred() ) { if (searchEdit->isModalEditing()) searchEdit->setModalEditing(FALSE); }#endif editor->setFocus(); searchBar->hide();#ifdef QTOPIA_PHONE if( !Global::mousePreferred() ) { if (!editor->isModalEditing()) editor->setModalEditing(TRUE); }#endif }}void TextEdit::search(){ editor->find( searchEdit->text(), FALSE );}void TextEdit::searchNext(){#ifdef QTOPIA_PHONE if (findTb) findTb->setFocus();#endif}void TextEdit::findWrapped(){ Global::statusMessage( tr("Find: reached end") );}void TextEdit::findNotFound(){ Global::statusMessage( tr("Find: not found") );}void TextEdit::findFound(){ Global::statusMessage( "" );}void TextEdit::newFile( const DocLnk &f ){ clear(); doc = new DocLnk(f); doc->setType("text/plain"); editorStack->raiseWidget( editor ); editor->setFocus(); editor->setEdited(FALSE); setReadOnly(FALSE); updateCaption();}void TextEdit::setDocument(const QString& f){#ifdef QTOPIA_PHONE qCopActivated = TRUE;#endif save(); DocLnk nf(f); nf.setType("text/plain"); openFile(nf); showEditTools(); // Show filename in caption QString name; if ( nf.linkFileKnown() && !nf.name().isEmpty() ) { name = nf.name(); } else { name = f; int sep = name.findRev( '/' ); if ( sep > 0 ) name = name.mid( sep+1 ); } updateCaption( name );}void TextEdit::openFile( const DocLnk &f ){ clear(); FileManager fm; QString txt; QByteArray ba; bool needsave = FALSE; if ( fm.loadFile( f, ba ) ) { txt = QString::fromUtf8(ba, ba.size()); if ( txt.utf8().length() != ba.size() ) { // not UTF8 QTextCodec* codec = QTextCodec::codecForContent(ba.data(),ba.size()); if ( codec ) { txt = codec->toUnicode(ba); needsave = TRUE; } } } fileNew(); if ( doc ) delete doc; doc = new DocLnk(f);#ifdef QTOPIA_PHONE backup = txt;#endif editor->setText(txt); editor->setEdited(needsave); updateCaption();}void TextEdit::showEditTools(){ if ( !doc ) close(); fileSelector->hide();#ifndef QTOPIA_PHONE menu->show(); editBar->show();#endif if ( searchBar && searchVisible ) searchBar->show(); updateCaption();}bool TextEdit::save(){ // case of nothing to save... if ( !doc ) return true; if ( !editor->edited() ) { if( wasCreated ) doc->removeFiles(); delete doc; doc = 0; return true; } QString rt = editor->text(); if ( doc->name().isEmpty() ) doc->setName(calculateName(rt)); FileManager fm; if ( !fm.saveFile( *doc, rt ) ) { return false; } delete doc; doc = 0; editor->setEdited( false ); return true;}QString TextEdit::calculateName(QString rt) { QString pt = rt.simplifyWhiteSpace(); int i = pt.find( ' ' ); QString docname = pt; if ( i > 0 ) docname = pt.left( i ); // remove "." at the beginning while( docname.startsWith( "." ) ) docname = docname.mid( 1 ); docname.replace( QRegExp("/"), "_" ); // cut the length. filenames longer than that don't make sense and something goes wrong when they get too long. if ( docname.length() > 40 ) docname = docname.left(40); if ( docname.isEmpty() ) docname = tr("Empty Text"); return docname;}void TextEdit::fileName(){ if (doc->name().isEmpty()) doc->setName(calculateName(editor->text())); // // Document properties operations depend on the file being // up-to-date. Force a write before changing properties. // wasCreated = wasCreated || !doc->fileKnown(); FileManager fm; if ( fm.saveFile( *doc, editor->text() ) ) {#ifdef QTOPIA_PHONE saved = TRUE;#endif } else return; DocPropertiesDialog *lp = new DocPropertiesDialog(doc, this); if (QPEApplication::execDialog(lp)) { updateCaption(doc->name()); } delete lp;}void TextEdit::clear(){ delete doc; doc = 0; editor->clear();#ifdef QTOPIA_PHONE saved = FALSE;#endif wasCreated = FALSE;}void TextEdit::updateCaption( const QString &name ){ if ( !doc ) setCaption( tr("Notes") );#ifndef QTOPIA_PHONE else { QString s = name; if ( s.isNull() ) s = doc->name(); if ( s.isEmpty() ) s = tr( "Unnamed" ); setCaption( s + " - " + tr("Notes") ); }#endif}void TextEdit::accept(){ fileOpen();} void TextEdit::message(const QCString& msg, const QByteArray& data){ if ( msg == "viewFile(QString)" || msg == "openFile(QString)" ) { save();#ifdef QTOPIA_PHONE qCopActivated = TRUE;#endif QDataStream d(data,IO_ReadOnly); QString filename; d >> filename; // // .desktop files should _not_ be able to be edited easily, // as they are generated by the server. Force opening the // file they refer to, rather than the .desktop file. // if (!filename.contains(".desktop")) { if (filename.stripWhiteSpace().isEmpty()){ newFile(DocLnk()); }else{ DocLnk dc; dc.setFile(filename); dc.setType("text/plain"); openFile(dc); } } else { openFile(DocLnk(filename)); } showEditTools(); updateCaption( filename ); if ( msg == "viewFile(QString)" ) setReadOnly(TRUE); QPEApplication::setKeepRunning(); }}void TextEdit::setReadOnly(bool y){ editor->setReadOnly(y); if ( y ) editor->setEdited(FALSE);}void TextEdit::closeEvent( QCloseEvent* e ){#ifdef QTOPIA_PHONE if( searchVisible ) findAction->setOn( FALSE ); else { if( editorStack->visibleWidget() == editor ) { if( qCopActivated ) { if( !canceled ) save(); e->accept(); } else fileOpen(); } else e->accept(); }#else if( editorStack->visibleWidget() == editor ) fileOpen(); e->accept();#endif}#include "textedit.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -