summaryrefslogtreecommitdiffstats
path: root/src/entrywidgetsource.cpp
diff options
context:
space:
mode:
authorSlávek Banko <[email protected]>2013-06-24 02:08:15 +0200
committerSlávek Banko <[email protected]>2013-07-04 02:44:37 +0200
commit998f21e02a725cd553d7c278819f67cd81295af4 (patch)
tree4bd158018e9302c31367b00c01cd2b41eb228414 /src/entrywidgetsource.cpp
downloadkbibtex-998f21e02a725cd553d7c278819f67cd81295af4.tar.gz
kbibtex-998f21e02a725cd553d7c278819f67cd81295af4.zip
Initial import
Diffstat (limited to 'src/entrywidgetsource.cpp')
-rw-r--r--src/entrywidgetsource.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/src/entrywidgetsource.cpp b/src/entrywidgetsource.cpp
new file mode 100644
index 0000000..27d95a6
--- /dev/null
+++ b/src/entrywidgetsource.cpp
@@ -0,0 +1,161 @@
+/***************************************************************************
+* Copyright (C) 2004-2009 by Thomas Fischer *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the *
+* Free Software Foundation, Inc., *
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+***************************************************************************/
+#include <qlayout.h>
+#include <qtextedit.h>
+#include <qbuffer.h>
+
+#include <kdialog.h>
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kglobalsettings.h>
+
+#include <fileexporterbibtex.h>
+#include <fileimporterbibtex.h>
+#include <entry.h>
+#include <settings.h>
+#include "entrywidgetsource.h"
+
+namespace KBibTeX
+{
+
+ EntryWidgetSource::EntryWidgetSource( BibTeX::File *bibtexfile, bool isReadOnly, QWidget *parent, const char *name )
+ : EntryWidgetTab( bibtexfile, isReadOnly, parent, name ), m_entry( NULL )
+ {
+ setupGUI();
+ }
+
+ EntryWidgetSource::~EntryWidgetSource()
+ {
+ if ( m_entry != NULL ) delete m_entry;
+ }
+
+ bool EntryWidgetSource::isModified()
+ {
+ return m_textEditSource->isModified();
+ }
+
+ bool EntryWidgetSource::containsValidText()
+ {
+ BibTeX::Entry dummy( BibTeX::Entry::etArticle, "iaKWjDMVuB2vQDuYRK49Y85tyxa9" );
+ apply( &dummy );
+ return dummy.id().compare( "iaKWjDMVuB2vQDuYRK49Y85tyxa9" ) != 0;
+ }
+
+ QString EntryWidgetSource::text()
+ {
+ return m_textEditSource->text();
+ }
+
+ void EntryWidgetSource::setText( const QString& text )
+ {
+ m_textEditSource->setText( text );
+ }
+
+ void EntryWidgetSource::updateGUI( BibTeX::Entry::EntryType /*entryType*/, bool /*enableAll*/ )
+ {
+ // nothing
+ }
+
+ void EntryWidgetSource::apply( BibTeX::Entry *entry )
+ {
+ Settings * settings = Settings::self();
+ QBuffer buffer;
+ BibTeX::FileImporterBibTeX importer( settings->editing_FirstNameFirst );
+
+ buffer.open( IO_WriteOnly );
+ QTextStream ts( &buffer );
+ ts.setEncoding( QTextStream::UnicodeUTF8 );
+ ts << m_textEditSource->text() << endl;
+ buffer.close();
+
+ buffer.open( IO_ReadOnly );
+ BibTeX::File *bibtexFile = importer.load( &buffer );
+ buffer.close();
+
+ if ( bibtexFile != NULL )
+ {
+ if ( bibtexFile->count() == 1 )
+ {
+ BibTeX::Entry * parsedEntry = dynamic_cast<BibTeX::Entry*>( bibtexFile->at( 0 ) );
+ if ( parsedEntry != NULL )
+ {
+ entry->copyFrom( parsedEntry );
+ settings->addToCompletion( parsedEntry );
+ }
+ }
+ delete bibtexFile;
+ }
+ }
+
+ void EntryWidgetSource::reset( BibTeX::Entry *entry )
+ {
+ if ( m_entry != entry )
+ {
+ if ( m_entry != NULL ) m_entry->copyFrom( entry ); else m_entry = new BibTeX::Entry( entry );
+ }
+
+ Settings * settings = Settings::self();
+
+ QBuffer buffer;
+ BibTeX::FileExporterBibTeX exporter;
+ exporter.setEncoding( "latex" );
+ exporter.setStringDelimiter( settings->fileIO_BibtexStringOpenDelimiter, settings->fileIO_BibtexStringCloseDelimiter );
+ exporter.setKeywordCasing( settings->fileIO_KeywordCasing );
+ exporter.setEnclosingCurlyBrackets( settings->fileIO_EnclosingCurlyBrackets );
+
+ buffer.open( IO_WriteOnly );
+ exporter.save( &buffer, entry );
+ buffer.close();
+
+ buffer.open( IO_ReadOnly );
+ QTextStream ts( &buffer );
+ ts.setEncoding( QTextStream::UnicodeUTF8 );
+ m_textEditSource->setText( ts.read() );
+ buffer.close();
+ }
+
+ void EntryWidgetSource::restore()
+ {
+ reset( m_entry );
+ }
+
+ void EntryWidgetSource::updateWarnings( BibTeX::Entry::EntryType /*entryType*/, QListView * /*listViewWarnings*/ )
+ {
+ // nothing
+ }
+
+ void EntryWidgetSource::setupGUI()
+ {
+ QGridLayout * gridLayout = new QGridLayout( this, 2, 2, KDialog::marginHint(), KDialog::spacingHint(), "gridLayout" );
+ gridLayout->setRowStretch( 0, 5 );
+ gridLayout->setColStretch( 0, 5 );
+
+ m_textEditSource = new QTextEdit( this );
+ gridLayout->addMultiCellWidget( m_textEditSource, 0, 0, 0, 1 );
+ m_textEditSource->setFont( KGlobalSettings::fixedFont() );
+ m_textEditSource->setReadOnly( m_isReadOnly );
+
+ KPushButton *btnReset = new KPushButton( i18n( "Restore" ), this );
+ gridLayout->addWidget( btnReset, 1, 1 );
+ connect( btnReset, SIGNAL( clicked() ), this, SLOT( restore() ) );
+ }
+
+}
+#include "entrywidgetsource.moc"