[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdevelop/lib
From: Dukju Ahn <dukjuahn () gmail ! com>
Date: 2007-05-19 8:14:34
Message-ID: 1179562474.512374.14340.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 666233 by dukjuahn:
Implemented outputview filtering.
Components who want to hookup special action into outputview item
or who want to paint their output string with special apprearance(font/color)
will now register their own outputview item factory. This factory will
create customized item for outputview.
M +1 -0 kdevexport.h
M +16 -2 plugins/outputviews/CMakeLists.txt
M +9 -1 plugins/outputviews/interfaces/ioutputview.h
A plugins/outputviews/interfaces/ioutputviewitem.cpp [License: GPL \
(v2+)] A plugins/outputviews/interfaces/ioutputviewitem.h [License: \
GPL (v2+)] A plugins/outputviews/interfaces/ioutputviewitemfactory.cpp \
[License: GPL (v2+)] A \
plugins/outputviews/interfaces/ioutputviewitemfactory.h [License: GPL (v2+)] M \
+34 -10 plugins/outputviews/outputviewcommand.cpp M +4 -1 \
plugins/outputviews/outputviewcommand.h M +58 -2 \
plugins/outputviews/outputwidget.cpp M +18 -1 \
plugins/outputviews/outputwidget.h M +6 -2 \
plugins/outputviews/simpleoutputview.cpp M +3 -1 \
plugins/outputviews/simpleoutputview.h
--- trunk/KDE/kdevelop/lib/kdevexport.h #666232:666233
@@ -109,6 +109,7 @@
#define KDEVPLATFORMPROJECT_EXPORT KDE_EXPORT
#define KDEVPLATFORMUTIL_EXPORT KDE_EXPORT
#define SUBLIME_EXPORT KDE_EXPORT
+#define OUTPUTVIEWINTERFACES_EXPORT KDE_EXPORT
#endif /* KDEVEXPORT_H*/
#endif
--- trunk/KDE/kdevelop/lib/plugins/outputviews/CMakeLists.txt #666232:666233
@@ -17,13 +17,27 @@
kde4_automoc(${simpleoutputview_LIB_SRCS})
kde4_add_plugin(kdevsimpleoutputview ${simpleoutputview_LIB_SRCS})
target_link_libraries(kdevsimpleoutputview ${KDE4_KDECORE_LIBS}
- ${QT_QTDESIGNER_LIBRARY} kdevplatforminterfaces kdevplatformutil)
+ ${QT_QTDESIGNER_LIBRARY} kdevplatforminterfaces kdevplatformutil \
kdevoutputviewinterfaces)
install(TARGETS kdevsimpleoutputview DESTINATION ${PLUGIN_INSTALL_DIR} )
+# interfaces
+set( outputviewinterfaces_LIB_SRCS
+ interfaces/ioutputviewitem.cpp
+ interfaces/ioutputviewitemfactory.cpp
+)
+kde4_add_library( kdevoutputviewinterfaces SHARED ${outputviewinterfaces_LIB_SRCS} )
+target_link_libraries(kdevoutputviewinterfaces ${KDE4_KDECORE_LIBS} \
${QT_QTGUI_LIBRARY} ) +set_target_properties(kdevoutputviewinterfaces PROPERTIES \
VERSION 4.0.0 SOVERSION 4) +install(TARGETS kdevoutputviewinterfaces DESTINATION \
${LIB_INSTALL_DIR} ) +
########### install files ###############
-install( FILES interfaces/ioutputview.h DESTINATION \
${INCLUDE_INSTALL_DIR}/kdevelop/outputviews ) +install( FILES
+ interfaces/ioutputview.h
+ interfaces/ioutputviewitem.h
+ interfaces/ioutputviewitemfactory.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/kdevelop/outputviews )
install( FILES kdevsimpleoutputview.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
--- trunk/KDE/kdevelop/lib/plugins/outputviews/interfaces/ioutputview.h \
#666232:666233 @@ -26,6 +26,7 @@
class KUrl;
class QString;
template <typename T1, typename T2> class QMap;
+class IOutputViewItemFactory;
/**
@author Andreas Pakulat
@@ -56,8 +57,15 @@
/**
* Execute the Command in a K3Process and capture the output in
* a new tab with the command as title
+ *
+ * @param factory Custom factory that will process output strings from KProcess \
and + * create corresponding IOutputViewItem subclasses. Note that factory \
objected + * handed to queueCommand() will be deleted after the command finishes. \
So the + * caller of this method shouldn't delete or reuse it.
+ * When null, use default factory.
*/
- virtual void queueCommand( const KUrl& workingdir, const QStringList&, const \
QMap<QString, QString>& ) = 0; + virtual void queueCommand( const KUrl& \
workingdir, const QStringList&, const QMap<QString, QString>&, + \
IOutputViewItemFactory *factory = 0 ) = 0;
/**
* Register a new Tab for Outputting logging information, this can be used
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputviewcommand.cpp #666232:666233
@@ -20,22 +20,49 @@
#include "outputviewcommand.h"
#include "processlinemaker.h"
+#include "ioutputviewitem.h"
+#include "ioutputviewitemfactory.h"
#include <QtCore/QMap>
#include <QtGui/QStandardItemModel>
+#include <QtCore/QList>
+#include <QAction>
#include <kurl.h>
#include <k3process.h>
#include <kdebug.h>
+class DefaultOutputItemFactory : public IOutputViewItemFactory
+{
+public:
+ virtual ~DefaultOutputItemFactory()
+ {}
+
+ IOutputViewItem* createItem( const QString& lineOutput )
+ {
+ return new DefaultOutputItem( lineOutput );
+ }
+};
+
OutputViewCommand::OutputViewCommand( const KUrl& workdir, const QStringList& \
command, const QMap<QString, QString>& env,
- QStandardItemModel* model )
+ QStandardItemModel* model,
+ IOutputViewItemFactory *itemFactory )
: QObject(0), m_proc(0), m_model(model)
{
m_proc = new K3Process();
m_proc->setWorkingDirectory( workdir.toLocalFile() );
m_procLineMaker = new ProcessLineMaker( m_proc );
+
+ if( itemFactory )
+ {
+ m_factory = itemFactory;
+ }
+ else
+ {
+ m_factory = new DefaultOutputItemFactory();
+ }
+
foreach( QString s, env.keys() )
m_proc->setEnvironment( s, env[s] );
foreach(QString s, command)
@@ -43,10 +70,6 @@
*m_proc << s;
m_command = command.join(" ");
-// connect( m_proc, SIGNAL(receivedStdout(K3Process* , char*, int) ),
-// this, SLOT( procReadStdout(K3Process* , char*, int) ) );
-// connect( m_proc, SIGNAL(receivedStderr(K3Process* , char*, int) ),
-// this, SLOT( procReadStderr(K3Process* , char*, int) ) );
connect( m_procLineMaker, SIGNAL(receivedStdoutLine(const QString&)),
this, SLOT(procReadStdout(const QString&) ));
connect( m_procLineMaker, SIGNAL(receivedStderrLine(const QString&)),
@@ -60,12 +83,13 @@
delete m_proc;
delete m_procLineMaker;
// delete m_model; // model is created and deleted in OutputViewPart
+ delete m_factory;
kDebug(9004) << "OutputViewCommand destructor.." << endl;
}
void OutputViewCommand::start()
{
- QStandardItem* i = new QStandardItem( m_command );
+ IOutputViewItem *i = m_factory->createItem( m_command );
m_model->appendRow( i );
m_proc->start( K3Process::OwnGroup, K3Process::AllOutput );
}
@@ -87,19 +111,19 @@
void OutputViewCommand::procReadStdout(const QString &line)
{
- m_model->appendRow( new QStandardItem( line ) );
+ m_model->appendRow( m_factory->createItem( line ) );
}
void OutputViewCommand::procReadStderr(const QString &line)
{
- m_model->appendRow( new QStandardItem( line ) );
+ m_model->appendRow( m_factory->createItem( line ) );
}
void OutputViewCommand::procFinished( K3Process* proc )
{
if( !m_proc->exitStatus() )
{
- QStandardItem* endItem = new QStandardItem(QString("Finished \
(%1)").arg(m_proc->exitStatus()) ); + IOutputViewItem* endItem = \
m_factory->createItem(QString("Finished (%1)").arg(m_proc->exitStatus())); \
m_model->appendRow( endItem ); kDebug(9004) << "Finished Sucessfully" << endl;
QString titlestring = title();
@@ -107,7 +131,7 @@
}
else
{
- QStandardItem* endItem = new QStandardItem(QString("Failed \
(%1)").arg(m_proc->exitStatus())); + IOutputViewItem* endItem = \
m_factory->createItem(QString("Failed (%1)").arg(m_proc->exitStatus())); \
m_model->appendRow( endItem ); kDebug(9004) << "Failed" << endl;
QString titlestring = title();
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputviewcommand.h #666232:666233
@@ -30,13 +30,15 @@
class K3Process;
class ProcessLineMaker;
template <typename T1, typename T2> class QMap;
+class IOutputViewItemFactory;
class OutputViewCommand : public QObject
{
Q_OBJECT
public:
OutputViewCommand( const KUrl& workdir, const QStringList& command,
- const QMap<QString, QString>& env, QStandardItemModel* model \
= 0 ); + const QMap<QString, QString>& env, QStandardItemModel* \
model = 0, + IOutputViewItemFactory *factory = 0 );
virtual ~OutputViewCommand();
virtual void start();
@@ -56,6 +58,7 @@
ProcessLineMaker *m_procLineMaker;
QStandardItemModel* m_model;
QString m_command;
+ IOutputViewItemFactory *m_factory;
};
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputwidget.cpp #666232:666233
@@ -20,10 +20,12 @@
#include "outputwidget.h"
#include "outputviewcommand.h"
+#include "ioutputviewitem.h"
#include "simpleoutputview.h"
-#include <QtGui/QListView>
#include <QtGui/QStandardItemModel>
+#include <kmenu.h>
+#include <kdebug.h>
OutputWidget::OutputWidget(QWidget* parent, SimpleOutputView* view)
: KTabWidget( parent )
@@ -56,7 +58,7 @@
if( !m_listviews.contains( cmd->title() ) )
{
// create new listview, assign view's model.
- QListView* listview = new QListView(this);
+ QListView* listview = new OutputListView(this);
listview->setModel( cmd->model() );
m_listviews[cmd->title()] = listview;
@@ -70,6 +72,60 @@
}
}
+//////////////////////////////////////////////////////////////////////
+
+OutputListView::OutputListView( QWidget* parent )
+ : QListView( parent )
+{
+// setWordWrap( true ); // doesn't work!
+ setContextMenuPolicy( Qt::CustomContextMenu );
+ connect( this, SIGNAL(customContextMenuRequested( const QPoint & )),
+ this, SLOT( customContextMenuRequested( const QPoint & ) ) );
+ connect( this, SIGNAL(activated( const QModelIndex& )),
+ this, SLOT(slotActivated( const QModelIndex& )) );
+ connect( this, SIGNAL(clicked( const QModelIndex& )),
+ this, SLOT(slotActivated( const QModelIndex& )) );
+}
+
+OutputListView::~OutputListView()
+{}
+
+void OutputListView::slotActivated( const QModelIndex& index )
+{
+ if( !index.isValid() )
+ {
+ kDebug(9004) << "contextMenu is invalid" << endl;
+ return;
+ }
+ QStandardItemModel *stdmodel = (QStandardItemModel*)model();
+ QStandardItem *stditem = stdmodel->itemFromIndex( index );
+ IOutputViewItem *outitem = dynamic_cast<IOutputViewItem*>( stditem );
+ Q_ASSERT( outitem );
+
+ outitem->activated();
+}
+
+void OutputListView::customContextMenuRequested( const QPoint & point )
+{
+ QModelIndex modelIndex = indexAt( point );
+ if( !modelIndex.isValid() )
+ {
+ kDebug(9004) << "contextMenu is invalid" << endl;
+ return;
+ }
+
+ QStandardItemModel *stdmodel = (QStandardItemModel*)model();
+ QStandardItem *stditem = stdmodel->itemFromIndex( modelIndex );
+ IOutputViewItem *outitem = dynamic_cast<IOutputViewItem*>( stditem );
+ Q_ASSERT(outitem);
+
+ QList<QAction*> actions = outitem->contextMenuActions();
+ KMenu menu( this );
+ menu.addActions( actions );
+
+ menu.exec( viewport()->mapToGlobal(point) );
+}
+
#include "outputwidget.moc"
//kate: space-indent on; indent-width 4; replace-tabs on; auto-insert-doxygen on; \
indent-mode cstyle;
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputwidget.h #666232:666233
@@ -23,11 +23,12 @@
#include <ktabwidget.h>
#include <QtCore/QMap>
-class QListView;
+#include <QtGui/QListView>
class QStandardItemModel;
class QString;
class SimpleOutputView;
class OutputViewCommand;
+class QModelIndex;
class OutputWidget : public KTabWidget
{
@@ -44,6 +45,22 @@
QMap<QString, QListView*> m_listviews;
};
+/** @class OutputListView
+ * Actual listview that will be embedded in OutputWidget's tab
+ * Subclassed to handle context-menu and item activation.
+ */
+class OutputListView : public QListView
+{
+ Q_OBJECT
+public:
+ OutputListView( QWidget* parent );
+ virtual ~OutputListView();
+
+protected Q_SLOTS:
+ void slotActivated( const QModelIndex& index );
+ void customContextMenuRequested( const QPoint & point );
+};
+
#endif
//kate: space-indent on; indent-width 4; replace-tabs on; auto-insert-doxygen on; \
indent-mode cstyle;
--- trunk/KDE/kdevelop/lib/plugins/outputviews/simpleoutputview.cpp #666232:666233
@@ -21,6 +21,7 @@
#include "simpleoutputview.h"
#include "outputwidget.h"
#include "outputviewcommand.h"
+#include "ioutputviewitemfactory.h"
#include <QtCore/QStringList>
@@ -103,7 +104,9 @@
delete d;
}
-void SimpleOutputView::queueCommand(const KUrl& dir, const QStringList& command, \
const QMap<QString, QString>& env ) +void SimpleOutputView::queueCommand(const KUrl& \
dir, const QStringList& command, + const \
QMap<QString, QString>& env, + \
IOutputViewItemFactory *factory) {
if( command.isEmpty() )
return;
@@ -111,7 +114,7 @@
QString title = command.first();
// todo: when all the outputviews using this model are closed by user, delete \
this model // maybe use KSharedPtr or something..
- OutputViewCommand* cmd = new OutputViewCommand( dir, command, env, 0 );
+ OutputViewCommand* cmd = new OutputViewCommand( dir, command, env, 0, factory );
if( !d->m_jobs.contains(title) )
{
// set model into command. Model lives longer than command, so although the \
command @@ -223,6 +226,7 @@
QQueue<OutputViewCommand*> &cmdQ = d->m_jobs[id];
Q_ASSERT( cmdQ.isEmpty() == false );
OutputViewCommand *cmd = cmdQ.dequeue();
+ cmd->disconnect();
cmd->deleteLater();
kDebug(9004) << "OutputViewCommand removed and deleteLater()ed " << (long)cmd << \
endl;
--- trunk/KDE/kdevelop/lib/plugins/outputviews/simpleoutputview.h #666232:666233
@@ -30,6 +30,7 @@
class K3Process;
class QString;
class OutputViewCommand;
+class IOutputViewItemFactory;
/**
@author Andreas Pakulat
@@ -43,7 +44,8 @@
public:
explicit SimpleOutputView(QObject *parent = 0, const QStringList &args = \
QStringList()); virtual ~SimpleOutputView();
- void queueCommand(const KUrl& dir, const QStringList& command, const \
QMap<QString, QString>& env ); + void queueCommand(const KUrl& dir, const \
QStringList& command, const QMap<QString, QString>& env, + \
IOutputViewItemFactory *factory = 0 );
void registerLogView( const QString& id, const QString& title );
void appendLine( const QString& id, const QString& line );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic