KDE/kdelibs/kate/part
Dominik Haumann
dhdev at gmx.de
Fri Apr 7 01:03:53 CEST 2006
SVN commit 527130 by dhaumann:
* add ui file in subfolder ui/. I hope I got the CMake stuff right.
This compiles for me. Maybe we have to change #include "modonhdwidget.h" to
#include "ui_modonhdwidget.h" in katedialogs.cpp, as I'm not 100% up-to-date.
* fix usage of QDialog::done(). Seems, that it can only return Accepted/Rejected=1/0,
and no other int values at all. Thus, get the user's choice with decision().
* KateModOnHdPrompt's ui is based on the ui file now.
* add option, to ignore whitespace changes for the diff.
* fix crash: KUrl( a_KTempFile_object->name() ) --> KUrl::fromPathOrURL
CCMAIL: kde-buildsystem at kde.org
M +6 -0 CMakeLists.txt
M +41 -30 katedialogs.cpp
M +17 -5 katedialogs.h
M +4 -3 katedocument.cpp
A ui (directory)
A ui/modonhdwidget.ui
--- trunk/KDE/kdelibs/kate/part/CMakeLists.txt #527129:527130
@@ -84,6 +84,12 @@
remove_definitions(-DQT3_SUPPORT_WARNINGS)
remove_definitions(-DQT3_SUPPORT)
+set( katepart_PART_UI
+modonhdwidget.ui
+)
+
+kde4_add_ui_files(katepart_PART_SRCS ui/${katepart_PART_UI} )
+
kde4_add_dcop_skels(katepart_PART_SRCS ${katepart_DCOP_SKEL_SRCS})
kde4_add_plugin(katepart ${katepart_PART_SRCS})
--- trunk/KDE/kdelibs/kate/part/katedialogs.cpp #527129:527130
@@ -34,6 +34,8 @@
#include "katesyntaxdocument.h"
#include "kateview.h"
+#include "modonhdwidget.h"
+
#include <ktexteditor/plugin.h>
#include <kio/job.h>
@@ -1634,16 +1636,17 @@
//BEGIN KateModOnHdPrompt
KateModOnHdPrompt::KateModOnHdPrompt( KateDocument *doc,
- int modtype,
+ KTextEditor::ModificationInterface::ModifiedOnDiskReason modtype,
const QString &reason,
QWidget *parent )
- : KDialogBase( Swallow, 0, parent, "", true, "", Ok|Apply|Cancel|User1 ),
+ : KDialog( parent, "", Ok|Apply|Cancel|User1 ),
+ m_returnCode( Delay ),
m_doc( doc ),
m_modtype ( modtype ),
m_tmpfile( 0 )
{
QString title, btnOK, whatisok;
- if ( modtype == 3 ) // deleted
+ if ( modtype == KTextEditor::ModificationInterface::OnDiskDeleted )
{
title = i18n("File Was Deleted on Disk");
btnOK = i18n("&Save File As...");
@@ -1655,7 +1658,7 @@
"they will be lost.");
}
- setButtonText( Ok, btnOK);
+ setButtonText( Ok, btnOK );
setButtonText( Apply, i18n("&Ignore") );
setButtonWhatsThis( Ok, whatisok );
@@ -1666,34 +1669,31 @@
enableButtonSeparator( true );
setCaption( title );
- QFrame *w = makeMainWidget();
- QVBoxLayout *lo = new QVBoxLayout( w );
- QHBoxLayout *lo1 = new QHBoxLayout();
- lo->addItem(lo1);
- QLabel *icon = new QLabel( w );
- icon->setPixmap( DesktopIcon("messagebox_warning" ) );
- lo1->addWidget( icon );
- lo1->addWidget( new QLabel( reason + "\n\n" + i18n("What do you want to do?"), w ) );
+ QWidget *w = new QWidget(this);
+ ui = new Ui::ModOnHdWidget();
+ ui->setupUi( w );
+ setMainWidget( w );
+ ui->lblIcon->setPixmap( DesktopIcon("messagebox_warning" ) );
+ ui->lblText->setText( reason + "\n\n" + i18n("What do you want to do?") );
+
// If the file isn't deleted, present a diff button, and a overwrite action.
- if ( modtype != 3 )
+ if ( modtype != KTextEditor::ModificationInterface::OnDiskDeleted )
{
- QHBoxLayout *lo2 = new QHBoxLayout();
- lo->addItem(lo2);
- QPushButton *btnDiff = new QPushButton( i18n("&View Difference"), w );
- lo2->addStretch( 1 );
- lo2->addWidget( btnDiff );
- connect( btnDiff, SIGNAL(clicked()), this, SLOT(slotDiff()) );
- btnDiff->setWhatsThis(i18n(
- "Calculates the difference between the editor contents and the disk "
- "file using diff(1) and opens the diff file with the default application "
- "for that.") );
-
setButtonText( User1, i18n("Overwrite") );
setButtonWhatsThis( User1, i18n("Overwrite the disk file with the editor content.") );
+ connect( this, SIGNAL(user1Clicked()), this, SLOT(slotUser1()) );
+ connect( ui->btnDiff, SIGNAL(clicked()), this, SLOT(slotDiff()) );
}
else
+ {
+ ui->chkIgnoreWhiteSpaces->setVisible( false );
+ ui->btnDiff->setVisible( false );
showButton( User1, false );
+ }
+
+ connect( this, SIGNAL(okClicked()), this, SLOT(slotOk()) );
+ connect( this, SIGNAL(applyClicked()), this, SLOT(slotApply()) );
}
KateModOnHdPrompt::~KateModOnHdPrompt()
@@ -1705,11 +1705,15 @@
// Start a KProcess that creates a diff
KProcIO *p = new KProcIO();
p->setComm( KProcess::All );
- *p << "diff" << "-ub" << "-" << m_doc->url().path();
+ *p << "diff" << QString(ui->chkIgnoreWhiteSpaces->isChecked() ? "-ub" : "-u")
+ << "-" << m_doc->url().path();
connect( p, SIGNAL(processExited(KProcess*)), this, SLOT(slotPDone(KProcess*)) );
connect( p, SIGNAL(readReady(KProcIO*)), this, SLOT(slotPRead(KProcIO*)) );
setCursor( Qt::WaitCursor );
+ // disable the button and checkbox, to hinder the user to run it twice.
+ ui->chkIgnoreWhiteSpaces->setEnabled( false );
+ ui->btnDiff->setEnabled( false );
p->start( KProcess::NotifyOnExit, true );
@@ -1743,6 +1747,9 @@
void KateModOnHdPrompt::slotPDone( KProcess *p )
{
setCursor( Qt::ArrowCursor );
+ ui->chkIgnoreWhiteSpaces->setEnabled( true );
+ ui->btnDiff->setEnabled( true );
+
// dominik: whitespace changes lead to diff with 0 bytes, so that slotPRead is
// never called. Thus, m_tmpfile can be NULL
if( m_tmpfile )
@@ -1760,12 +1767,12 @@
if ( ! m_tmpfile )
{
KMessageBox::information( this,
- i18n("Besides white space changes the files are identical."),
+ i18n("Besides white space changes, the files are identical."),
i18n("Diff Output") );
return;
}
- KRun::runURL( m_tmpfile->name(), "text/x-diff", true );
+ KRun::runURL( KUrl::fromPathOrURL(m_tmpfile->name()), "text/x-diff", true );
delete m_tmpfile;
m_tmpfile = 0;
}
@@ -1783,17 +1790,21 @@
"kate_ignore_modonhd" ) != KMessageBox::Continue )
return;
- done(Ignore);
+ m_returnCode = Ignore;
+ done( Accepted );
}
void KateModOnHdPrompt::slotOk()
{
- done( m_modtype == 3 ? Save : Reload );
+ m_returnCode = (m_modtype == KTextEditor::ModificationInterface::OnDiskDeleted) ?
+ Save : Reload;
+ done( Accepted );
}
void KateModOnHdPrompt::slotUser1()
{
- done( Overwrite );
+ m_returnCode = Overwrite;
+ done( Accepted );
}
//END KateModOnHdPrompt
--- trunk/KDE/kdelibs/kate/part/katedialogs.h #527129:527130
@@ -26,6 +26,7 @@
#include "katehighlight.h"
#include <ktexteditor/attribute.h>
+#include <ktexteditor/modificationinterface.h>
#include <ktexteditor/document.h>
#include <ktexteditor/configpage.h>
@@ -71,6 +72,11 @@
class QSpinBox;
class QCheckBox;
+namespace Ui
+{
+ class ModOnHdWidget;
+}
+
class KateConfigPage : public KTextEditor::ConfigPage
{
Q_OBJECT
@@ -380,18 +386,22 @@
* If the file wasn't deleted, it has a 'diff' button, which will create
* a diff file (uing diff(1)) and launch that using KRun.
*/
-class KateModOnHdPrompt : public KDialogBase
+class KateModOnHdPrompt : public KDialog
{
Q_OBJECT
public:
enum Status {
- Reload=1, // 0 is KDialogBase::Cancel
+ Delay = 0,
+ Reload,
Save,
Overwrite,
Ignore
};
- KateModOnHdPrompt( KateDocument *doc, int modtype, const QString &reason, QWidget *parent );
+ KateModOnHdPrompt( KateDocument *doc,
+ KTextEditor::ModificationInterface::ModifiedOnDiskReason modtype,
+ const QString &reason, QWidget *parent );
~KateModOnHdPrompt();
+ Status decision() const { return m_returnCode; }
public Q_SLOTS:
/**
@@ -410,11 +420,13 @@
void slotPDone(KProcess*); ///< Runs the diff file when done
private:
+ Status m_returnCode;
+ Ui::ModOnHdWidget* ui;
KateDocument *m_doc;
- int m_modtype;
+ KTextEditor::ModificationInterface::ModifiedOnDiskReason m_modtype;
class KTempFile *m_tmpfile; ///< The diff file. Deleted by KRun when the viewer is exited.
};
#endif
-//kate: indent-spaces indent-width 2
+// kate: space-indent on; indent-width 2; replace-tabs on;
--- trunk/KDE/kdelibs/kate/part/katedocument.cpp #527129:527130
@@ -3970,7 +3970,8 @@
m_isasking = 1;
KateModOnHdPrompt p( this, m_modOnHdReason, reasonedMOHString(), widget() );
- switch ( p.exec() )
+ p.exec(); // return code of exec() not important. Solved via decision()
+ switch ( p.decision() )
{
case KateModOnHdPrompt::Save:
{
@@ -4020,8 +4021,8 @@
save();
break;
- default: // cancel: ignore next focus event
- m_isasking = -1;
+ default: // Delay: cancel: ignore next focus event
+ m_isasking = -1;
}
}
}
More information about the Kde-buildsystem
mailing list