diff options
Diffstat (limited to 'editors/editor-chooser/editorchooser_widget.cpp')
-rw-r--r-- | editors/editor-chooser/editorchooser_widget.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/editors/editor-chooser/editorchooser_widget.cpp b/editors/editor-chooser/editorchooser_widget.cpp new file mode 100644 index 00000000..6c9f7071 --- /dev/null +++ b/editors/editor-chooser/editorchooser_widget.cpp @@ -0,0 +1,132 @@ +#include <qcombobox.h> +#include <qbuttongroup.h> +#include <qradiobutton.h> + +#include <kapplication.h> +#include <kdeversion.h> +#include <kservice.h> +#include <kdebug.h> +#include <kconfig.h> + + +#include "editorchooser_widget.h" + + +EditorChooserWidget::EditorChooserWidget(QWidget *parent, const char *name) + : EditChooser(parent, name) +{ + // ask the trader which editors he has to offer + m_offers = KTrader::self()->query("text/plain", "'KTextEditor/Document' in ServiceTypes"); + + // remove the vim-part, it's known to crash + KTrader::OfferList::Iterator it = m_offers.begin(); + while( it != m_offers.end() ) + { + if ( ((*it)->desktopEntryName() == "vimpart") + || ((*it)->desktopEntryName() == "qeditor_part") ) + { + m_offers.remove( it ); + break; + } + ++it; + } + + load(); + slotEditPartChanged(QString()); +} + + +void EditorChooserWidget::load() +{ + EditorPart->clear(); + + // find the editor to use + KConfig *config = kapp->config(); + config->setGroup("Editor"); + QString editor = config->readPathEntry("EmbeddedKTextEditor"); + + // add the entries to the listview + KTrader::OfferList::Iterator it; + int index=-1, current=0; + for (it = m_offers.begin(); it != m_offers.end(); ++it) + { + EditorPart->insertItem((*it)->name()); + if ( (*it)->desktopEntryName() == editor ) + index = current; + ++current; + } + + if (index >=0) + EditorPart->setCurrentItem(index); + + QString dirtyAction = config->readEntry( "DirtyAction" ); + + if ( dirtyAction == "reload" ) + { + reload->setChecked( true ); + } + else if ( dirtyAction == "alert" ) + { + alert->setChecked( true ); + } + else + { + nothing->setChecked( true ); + } +} + + +void EditorChooserWidget::save() +{ + KConfig *config = kapp->config(); + config->setGroup("Editor"); + + KTrader::OfferList::Iterator it; + for (it = m_offers.begin(); it != m_offers.end(); ++it) + if ( EditorPart->currentText() == (*it)->name() ) + { + config->writePathEntry("EmbeddedKTextEditor", (*it)->desktopEntryName()); + } + + if ( reload->isChecked() ) + { + config->writeEntry( "DirtyAction", "reload" ); + } + else if ( alert->isChecked() ) + { + config->writeEntry( "DirtyAction", "alert" ); + } + else + { + config->writeEntry( "DirtyAction", "nothing" ); + } + + config->sync(); +} + + +void EditorChooserWidget::accept() +{ + save(); +} + +void EditorChooserWidget::slotEditPartChanged( const QString & ) +{ + KTrader::OfferList::Iterator it; + for (it = m_offers.begin(); it != m_offers.end(); ++it) + { + if ( EditorPart->currentText() == (*it)->name() ) + { + external_changes_group->setEnabled( (*it)->desktopEntryName() == "katepart" ); + return; + } + } + external_changes_group->setEnabled( false ); +} + + +#include "editorchooser_widget.moc" + + + + |