forked from qt-creator/qt-creator
Remove 'Analyze' mode.
- Introduce a shared analysis output pane using a stacked widgets, layouts for the tools' output panes and toolbar widgets. - Introduce IAnalyzerOutputPaneAdapter interface returned by IAnalyzerTool to manage them. - Remove mode and its mainwindow contents (depending on enum constants should use cases for it occur). Reviewed-by: con
This commit is contained in:
@@ -34,14 +34,158 @@
|
||||
**************************************************************************/
|
||||
|
||||
#include "ianalyzertool.h"
|
||||
#include "analyzeroutputpane.h"
|
||||
|
||||
using namespace Analyzer;
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QtGui/QAbstractItemView>
|
||||
#include <QtGui/QItemSelectionModel>
|
||||
#include <QtCore/QAbstractItemModel>
|
||||
#include <QtCore/QModelIndex>
|
||||
|
||||
namespace Analyzer {
|
||||
|
||||
IAnalyzerTool::IAnalyzerTool(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
\class Analyzer::IAnalyzerOutputPaneAdapter
|
||||
|
||||
\brief Adapter for handling multiple tools in the common 'Analysis' output pane.
|
||||
|
||||
Provides the tool-specific output pane widget and optionally, a widget to be
|
||||
inserted into into the toolbar. Ownership of them is taken by the output pane.
|
||||
Forwards navigation calls issued by the output pane.
|
||||
*/
|
||||
|
||||
IAnalyzerOutputPaneAdapter::IAnalyzerOutputPaneAdapter(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
IAnalyzerOutputPaneAdapter::~IAnalyzerOutputPaneAdapter()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
\class Analyzer::ListItemViewOutputPaneAdapter
|
||||
|
||||
\brief Utility class implementing wrap-around navigation for flat lists.
|
||||
|
||||
Provides an optional mechanism to pop up automatically in case errors show up.
|
||||
*/
|
||||
|
||||
ListItemViewOutputPaneAdapter::ListItemViewOutputPaneAdapter(QObject *parent) :
|
||||
IAnalyzerOutputPaneAdapter(parent), m_listView(0), m_showOnRowsInserted(true)
|
||||
{
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::connectNavigationSignals(QAbstractItemModel *model)
|
||||
{
|
||||
connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
|
||||
this, SIGNAL(navigationStatusChanged()));
|
||||
connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
|
||||
this, SLOT(slotRowsInserted()));
|
||||
connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
|
||||
this, SIGNAL(navigationStatusChanged()));
|
||||
connect(model, SIGNAL(modelReset()),
|
||||
this, SIGNAL(navigationStatusChanged()));
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::slotRowsInserted()
|
||||
{
|
||||
if (m_showOnRowsInserted && !m_listView->isVisible())
|
||||
emit popup(true);
|
||||
}
|
||||
|
||||
QWidget *ListItemViewOutputPaneAdapter::paneWidget()
|
||||
{
|
||||
if (!m_listView) {
|
||||
m_listView = createItemView();
|
||||
if (QAbstractItemModel *model = m_listView->model())
|
||||
connectNavigationSignals(model);
|
||||
}
|
||||
return m_listView;
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::setFocus()
|
||||
{
|
||||
if (m_listView)
|
||||
m_listView->setFocus();
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::hasFocus() const
|
||||
{
|
||||
return m_listView ? m_listView->hasFocus() : false;
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::canFocus() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::canNavigate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::canNext() const
|
||||
{
|
||||
return rowCount() > 0;
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::canPrevious() const
|
||||
{
|
||||
return rowCount() > 0;
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::goToNext()
|
||||
{
|
||||
setCurrentRow((currentRow() + 1) % rowCount());
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::goToPrev()
|
||||
{
|
||||
const int prevRow = currentRow() - 1;
|
||||
setCurrentRow(prevRow >= 0 ? prevRow : rowCount() - 1);
|
||||
}
|
||||
|
||||
bool ListItemViewOutputPaneAdapter::showOnRowsInserted() const
|
||||
{
|
||||
return m_showOnRowsInserted;
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::setShowOnRowsInserted(bool v)
|
||||
{
|
||||
m_showOnRowsInserted = v;
|
||||
}
|
||||
|
||||
int ListItemViewOutputPaneAdapter::currentRow() const
|
||||
{
|
||||
if (m_listView) {
|
||||
const QModelIndex index = m_listView->selectionModel()->currentIndex();
|
||||
if (index.isValid())
|
||||
return index.row();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void ListItemViewOutputPaneAdapter::setCurrentRow(int r)
|
||||
{
|
||||
QTC_ASSERT(m_listView, return; )
|
||||
const QModelIndex index = m_listView->model()->index(r, 0);
|
||||
m_listView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Current);
|
||||
m_listView->scrollTo(index);
|
||||
}
|
||||
|
||||
int ListItemViewOutputPaneAdapter::rowCount() const
|
||||
{
|
||||
return m_listView ? m_listView->model()->rowCount() : 0;
|
||||
}
|
||||
|
||||
// -------------IAnalyzerTool
|
||||
QString IAnalyzerTool::modeString()
|
||||
{
|
||||
switch (mode()) {
|
||||
@@ -54,3 +198,10 @@ QString IAnalyzerTool::modeString()
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
IAnalyzerOutputPaneAdapter *IAnalyzerTool::outputPaneAdapter()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace Analyzer
|
||||
|
||||
Reference in New Issue
Block a user