Re-use output window implementation for general messages.

Moving the implementation to core plugin.
This commit is contained in:
con
2011-04-21 13:42:17 +02:00
parent ef77155291
commit feefdfdc38
12 changed files with 40 additions and 90 deletions

View File

@@ -101,6 +101,7 @@ const char * const C_DESIGN_MODE = "Core.DesignMode";
const char * const C_EDITORMANAGER = "Core.EditorManager";
const char * const C_NAVIGATION_PANE = "Core.NavigationPane";
const char * const C_PROBLEM_PANE = "Core.ProblemPane";
const char * const C_GENERAL_OUTPUT_PANE = "Core.GeneralOutputPane";
//default editor kind
const char * const K_DEFAULT_TEXT_EDITOR_DISPLAY_NAME = QT_TRANSLATE_NOOP("OpenWith::Editors", "Plain Text Editor");

View File

@@ -27,6 +27,7 @@ SOURCES += mainwindow.cpp \
messagemanager.cpp \
messageoutputwindow.cpp \
outputpane.cpp \
outputwindow.cpp \
vcsmanager.cpp \
statusbarmanager.cpp \
versiondialog.cpp \
@@ -104,6 +105,7 @@ HEADERS += mainwindow.h \
messagemanager.h \
messageoutputwindow.h \
outputpane.h \
outputwindow.h \
vcsmanager.h \
statusbarmanager.h \
editormanager/editormanager.h \

View File

@@ -31,6 +31,8 @@
**************************************************************************/
#include "messageoutputwindow.h"
#include "icontext.h"
#include "coreconstants.h"
#include <QtGui/QScrollBar>
@@ -38,9 +40,8 @@ using namespace Core::Internal;
MessageOutputWindow::MessageOutputWindow()
{
m_widget = new TextView;
m_widget = new Core::OutputWindow(Core::Context(Core::Constants::C_GENERAL_OUTPUT_PANE));
m_widget->setReadOnly(true);
m_widget->setFrameStyle(QFrame::NoFrame);
}
MessageOutputWindow::~MessageOutputWindow()
@@ -85,10 +86,7 @@ void MessageOutputWindow::visibilityChanged(bool /*b*/)
void MessageOutputWindow::append(const QString &text)
{
bool scroll = m_widget->isScrollbarAtBottom() || !m_widget->isVisible();
m_widget->append(text);
if (scroll)
m_widget->scrollToBottom();
m_widget->appendText(text);
}
int MessageOutputWindow::priorityInStatusBar() const
@@ -120,34 +118,3 @@ bool MessageOutputWindow::canNavigate()
{
return false;
}
// -------- Copied from OutputWindow which should be shared instead
bool TextView::isScrollbarAtBottom() const
{
return verticalScrollBar()->value() == verticalScrollBar()->maximum();
}
void TextView::scrollToBottom()
{
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
}
void TextView::showEvent(QShowEvent *e)
{
bool atBottom = isScrollbarAtBottom();
QTextEdit::showEvent(e);
if (atBottom)
scrollToBottom();
}
void TextView::resizeEvent(QResizeEvent *e)
{
//Keep scrollbar at bottom of window while resizing, to ensure we keep scrolling
//This can happen if window is resized while building, or if the horizontal scrollbar appears
bool atBottom = isScrollbarAtBottom();
QTextEdit::resizeEvent(e);
if (atBottom)
scrollToBottom();
}

View File

@@ -33,7 +33,8 @@
#ifndef MESSAGEOUTPUTWINDOW_H
#define MESSAGEOUTPUTWINDOW_H
#include <coreplugin/ioutputpane.h>
#include "ioutputpane.h"
#include "outputwindow.h"
#include <QtGui/QShowEvent>
#include <QtGui/QResizeEvent>
@@ -42,21 +43,6 @@
namespace Core {
namespace Internal {
class TextView : public QTextEdit
{
Q_OBJECT
public:
TextView(QWidget *parent = 0) : QTextEdit(parent) {}
void showEvent(QShowEvent *);
void scrollToBottom();
bool isScrollbarAtBottom() const;
protected:
void resizeEvent(QResizeEvent *e);
};
class MessageOutputWindow : public Core::IOutputPane
{
Q_OBJECT
@@ -85,7 +71,7 @@ public:
bool canNavigate();
private:
TextView *m_widget;
OutputWindow *m_widget;
};
} // namespace Internal

View File

@@ -32,10 +32,10 @@
#include "outputwindow.h"
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
#include "actionmanager/actionmanager.h"
#include "actionmanager/command.h"
#include "coreconstants.h"
#include "icore.h"
#include <utils/qtcassert.h>
#include <utils/outputformatter.h>
@@ -47,8 +47,7 @@ static const int MaxBlockCount = 100000;
using namespace Utils;
namespace ProjectExplorer {
namespace Internal {
namespace Core {
/*******************/
@@ -259,7 +258,7 @@ void OutputWindow::appendText(const QString &textIn, const QTextCharFormat &form
{
QString text = textIn;
text.remove(QLatin1Char('\r'));
if (document()->blockCount() > maxLineCount)
if (maxLineCount > 0 && document()->blockCount() > maxLineCount)
return;
const bool atBottom = isScrollbarAtBottom();
QTextCursor cursor = QTextCursor(document());
@@ -267,7 +266,7 @@ void OutputWindow::appendText(const QString &textIn, const QTextCharFormat &form
cursor.beginEditBlock();
cursor.insertText(doNewlineEnfocement(text), format);
if (document()->blockCount() > maxLineCount) {
if (maxLineCount > 0 && document()->blockCount() > maxLineCount) {
QTextCharFormat tmp;
tmp.setFontWeight(QFont::Bold);
cursor.insertText(tr("Additional output omitted\n"), tmp);
@@ -292,6 +291,10 @@ void OutputWindow::clear()
void OutputWindow::scrollToBottom()
{
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
// QPlainTextEdit destroys the first calls value in case of multiline
// text, so make sure that the scroll bar actually gets the value set.
// Is a noop if the first call succeeded.
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
}
void OutputWindow::grayOutOldContent()
@@ -331,5 +334,4 @@ void OutputWindow::setWordWrapEnabled(bool wrap)
setWordWrapMode(QTextOption::NoWrap);
}
} // namespace Internal
} // namespace ProjectExplorer
} // namespace Core

View File

@@ -33,20 +33,18 @@
#ifndef OUTPUTWINDOW_H
#define OUTPUTWINDOW_H
#include "core_global.h"
#include "icontext.h"
#include <utils/outputformatter.h>
#include <coreplugin/icontext.h>
#include <QtGui/QPlainTextEdit>
namespace Core {
class IContext;
}
namespace ProjectExplorer {
class IContext;
namespace Internal {
class OutputWindow : public QPlainTextEdit
class CORE_EXPORT OutputWindow : public QPlainTextEdit
{
Q_OBJECT
@@ -59,7 +57,7 @@ public:
void appendMessage(const QString &out, Utils::OutputFormat format);
/// appends a \p text using \p format without using formater
void appendText(const QString &text, const QTextCharFormat &format, int maxLineCount);
void appendText(const QString &text, const QTextCharFormat &format = QTextCharFormat(), int maxLineCount = -1);
void grayOutOldContent();
void clear();
@@ -93,7 +91,6 @@ private:
bool m_mousePressed;
};
} // namespace Internal
} // namespace ProjectExplorer
} // namespace Core
#endif // OUTPUTWINDOW_H

View File

@@ -32,7 +32,6 @@
**************************************************************************/
#include "appoutputpane.h"
#include "outputwindow.h"
#include "projectexplorerconstants.h"
#include "projectexplorer.h"
#include "projectexplorersettings.h"
@@ -65,7 +64,7 @@ enum { debug = 0 };
using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
AppOutputPane::RunControlTab::RunControlTab(RunControl *rc, OutputWindow *w) :
AppOutputPane::RunControlTab::RunControlTab(RunControl *rc, Core::OutputWindow *w) :
runControl(rc), window(w), asyncClosing(false)
{
}
@@ -203,7 +202,7 @@ int AppOutputPane::priorityInStatusBar() const
void AppOutputPane::clearContents()
{
OutputWindow *currentWindow = qobject_cast<OutputWindow *>(m_tabWidget->currentWidget());
Core::OutputWindow *currentWindow = qobject_cast<Core::OutputWindow *>(m_tabWidget->currentWidget());
if (currentWindow)
currentWindow->clear();
}
@@ -259,7 +258,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
// Create new
static uint counter = 0;
Core::Context context(Constants::C_APP_OUTPUT, counter++);
OutputWindow *ow = new OutputWindow(context, m_tabWidget);
Core::OutputWindow *ow = new Core::OutputWindow(context, m_tabWidget);
ow->setWindowTitle(tr("Application Output Window"));
// TODO the following is a hidden impossible dependency of projectexplorer on qt4projectmanager
ow->setWindowIcon(QIcon(QLatin1String(Qt4ProjectManager::Constants::ICON_WINDOW)));
@@ -274,7 +273,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
qDebug() << "OutputPane::createNewOutputWindow: Adding tab for " << rc;
}
void AppOutputPane::handleOldOutput(OutputWindow *window) const
void AppOutputPane::handleOldOutput(Core::OutputWindow *window) const
{
if (ProjectExplorerPlugin::instance()->projectExplorerSettings().cleanOldAppOutput)
window->clear();

View File

@@ -34,8 +34,7 @@
#ifndef APPOUTPUTPANE_H
#define APPOUTPUTPANE_H
#include "outputwindow.h"
#include <coreplugin/outputwindow.h>
#include <coreplugin/ioutputpane.h>
QT_BEGIN_NAMESPACE
@@ -110,9 +109,9 @@ private slots:
private:
struct RunControlTab {
explicit RunControlTab(RunControl *runControl = 0,
OutputWindow *window = 0);
Core::OutputWindow *window = 0);
RunControl* runControl;
OutputWindow *window;
Core::OutputWindow *window;
// Is the run control stopping asynchronously, close the tab once it finishes
bool asyncClosing;
};
@@ -126,7 +125,7 @@ private:
int currentIndex() const;
RunControl *currentRunControl() const;
int tabWidgetIndexOf(int runControlIndex) const;
void handleOldOutput(OutputWindow *window) const;
void handleOldOutput(Core::OutputWindow *window) const;
QWidget *m_mainWidget;
QTabWidget *m_tabWidget;

View File

@@ -63,7 +63,7 @@ const int MAX_LINECOUNT = 50000;
CompileOutputWindow::CompileOutputWindow(BuildManager * /*bm*/)
{
Core::Context context(Constants::C_COMPILE_OUTPUT);
m_outputWindow = new OutputWindow(context);
m_outputWindow = new Core::OutputWindow(context);
m_outputWindow->setWindowTitle(tr("Compile Output"));
m_outputWindow->setWindowIcon(QIcon(QLatin1String(Qt4ProjectManager::Constants::ICON_WINDOW)));
m_outputWindow->setReadOnly(true);

View File

@@ -33,8 +33,8 @@
#ifndef COMPILEOUTPUTWINDOW_H
#define COMPILEOUTPUTWINDOW_H
#include "outputwindow.h"
#include "buildstep.h"
#include <coreplugin/outputwindow.h>
#include <coreplugin/ioutputpane.h>
#include <QtCore/QHash>
@@ -86,7 +86,7 @@ private slots:
void updateWordWrapMode();
private:
OutputWindow *m_outputWindow;
Core::OutputWindow *m_outputWindow;
QHash<unsigned int, int> m_taskPositions;
ShowOutputTaskHandler * m_handler;
};

View File

@@ -58,7 +58,6 @@
#include "iprojectmanager.h"
#include "metatypedeclarations.h"
#include "nodesvisitor.h"
#include "outputwindow.h"
#include "appoutputpane.h"
#include "persistentsettings.h"
#include "pluginfilefactory.h"

View File

@@ -28,7 +28,6 @@ HEADERS += projectexplorer.h \
showoutputtaskhandler.h \
vcsannotatetaskhandler.h \
taskwindow.h \
outputwindow.h \
persistentsettings.h \
projectfilewizardextension.h \
session.h \
@@ -125,7 +124,6 @@ SOURCES += projectexplorer.cpp \
showoutputtaskhandler.cpp \
vcsannotatetaskhandler.cpp \
taskwindow.cpp \
outputwindow.cpp \
persistentsettings.cpp \
projectfilewizardextension.cpp \
session.cpp \