Git commit db49a7952a9da9076d91fa6f87a861daad786bb7 by Aleix Pol. Committed on 31/01/2016 at 23:21. Pushed by apol into branch '5.0'. Reduce duplicate code Playing with the "simian" tool, I found these matches, worked them out. There's some others but they're a bit more complex to untangle. M +9 -15 outputview/outputfilteringstrategies.cpp M +5 -0 outputview/outputformats.cpp M +2 -0 outputview/outputformats.h M +1 -25 project/projectmodel.cpp M +15 -27 shell/mainwindow.cpp M +2 -0 shell/mainwindow.h M +6 -11 shell/partdocument.cpp M +12 -11 shell/workingsetcontroller.cpp M +2 -0 shell/workingsetcontroller.h M +11 -11 sublime/idealcontroller.cpp M +1 -0 sublime/idealcontroller.h M +9 -14 sublime/mainwindow.cpp M +2 -0 sublime/mainwindow.h M +13 -14 util/multilevellistview.cpp http://commits.kde.org/kdevplatform/db49a7952a9da9076d91fa6f87a861daad786bb7 diff --git a/outputview/outputfilteringstrategies.cpp b/outputview/outputfi= lteringstrategies.cpp index b7ce5ba..117814e 100644 --- a/outputview/outputfilteringstrategies.cpp +++ b/outputview/outputfilteringstrategies.cpp @@ -29,6 +29,12 @@ = namespace KDevelop { +void initializeFilteredItem(FilteredItem& item, const ErrorFormat& filter,= const QRegularExpressionMatch& match) +{ + item.lineNo =3D match.captured( filter.lineGroup ).toInt() - 1; + item.columnNo =3D filter.columnNumber(match); +} + = template FilteredItem match(const ErrorFormats& errorFormats, const QString& line) @@ -37,15 +43,8 @@ FilteredItem match(const ErrorFormats& errorFormats, con= st QString& line) for( const ErrorFormat& curErrFilter : errorFormats ) { const auto match =3D curErrFilter.expression.match(line); if( match.hasMatch() ) { + initializeFilteredItem(item, curErrFilter, match); item.url =3D QUrl::fromUserInput(match.captured( curErrFilter.= fileGroup )); - item.lineNo =3D match.captured( curErrFilter.lineGroup ).toInt= () - 1; - if(curErrFilter.columnGroup >=3D 0) { - item.columnNo =3D match.captured( curErrFilter.columnGroup= ).toInt() - 1; - } else { - item.columnNo =3D 0; - } - - QString txt =3D match.captured(curErrFilter.textGroup); = item.type =3D FilteredItem::ErrorItem; = @@ -313,14 +312,9 @@ FilteredItem CompilerFilterStrategy::errorInLine(const= QString& line) } item.url =3D d->pathForFile( match.captured( curErrFilter.= fileGroup ) ).toUrl(); } - item.lineNo =3D match.captured( curErrFilter.lineGroup ).toInt= () - 1; - if(curErrFilter.columnGroup >=3D 0) { - item.columnNo =3D match.captured( curErrFilter.columnGroup= ).toInt() - 1; - } else { - item.columnNo =3D 0; - } + initializeFilteredItem(item, curErrFilter, match); = - QString txt =3D match.captured(curErrFilter.textGroup); + const QString txt =3D match.captured(curErrFilter.textGroup); = // Find the indicator which happens most early. int earliestIndicatorIdx =3D txt.length(); diff --git a/outputview/outputformats.cpp b/outputview/outputformats.cpp index cc2a8d8..69b34f0 100644 --- a/outputview/outputformats.cpp +++ b/outputview/outputformats.cpp @@ -47,5 +47,10 @@ ActionFormat::ActionFormat(int file, const QString& regE= xp) { } = +int ErrorFormat::columnNumber(const QRegularExpressionMatch& match) const +{ + return columnGroup >=3D 0 ? match.captured( columnGroup ).toInt() - 1 = : 0; +} + } = diff --git a/outputview/outputformats.h b/outputview/outputformats.h index b28f3bf..64463f5 100644 --- a/outputview/outputformats.h +++ b/outputview/outputformats.h @@ -39,6 +39,8 @@ struct ErrorFormat int lineGroup, columnGroup; int textGroup; QString compiler; + + int columnNumber(const QRegularExpressionMatch& match) const; }; = } diff --git a/project/projectmodel.cpp b/project/projectmodel.cpp index 7156a33..8ab754d 100644 --- a/project/projectmodel.cpp +++ b/project/projectmodel.cpp @@ -1108,30 +1108,7 @@ void ProjectVisitor::visit ( IProject* prj ) = void ProjectVisitor::visit ( ProjectBuildFolderItem* folder ) { - foreach( ProjectFileItem* item, folder->fileList() ) - { - visit( item ); - } - foreach( ProjectTargetItem* item, folder->targetList() ) - { - if( item->type() =3D=3D ProjectBaseItem::LibraryTarget ) - { - visit( dynamic_cast( item ) ); - } else if( item->type() =3D=3D ProjectBaseItem::ExecutableTarget ) - { - visit( dynamic_cast( item ) ); - } - } - foreach( ProjectFolderItem* item, folder->folderList() ) - { - if( item->type() =3D=3D ProjectBaseItem::BuildFolder ) - { - visit( dynamic_cast( item ) ); - } else if( item->type() =3D=3D ProjectBaseItem::Folder ) - { - visit( dynamic_cast( item ) ); - } - } + visit(static_cast(folder)); } = void ProjectVisitor::visit ( ProjectExecutableTargetItem* exec ) @@ -1170,7 +1147,6 @@ void ProjectVisitor::visit ( ProjectFolderItem* folde= r ) } } = - void ProjectVisitor::visit ( ProjectFileItem* ) { } diff --git a/shell/mainwindow.cpp b/shell/mainwindow.cpp index 2b2fe29..3465aa8 100644 --- a/shell/mainwindow.cpp +++ b/shell/mainwindow.cpp @@ -102,16 +102,11 @@ void MainWindow::createGUI(KParts::Part* part) this, SLOT(setCaption(QString))); } = -MainWindow::MainWindow( Sublime::Controller *parent, Qt::WindowFlags flags= ) - : Sublime::MainWindow( parent, flags ) +void MainWindow::initializeCorners() { - QDBusConnection::sessionBus().registerObject( QStringLiteral("/kdevelo= p/MainWindow"), - this, QDBusConnection::ExportScriptableSlots ); - - setAcceptDrops( true ); - KConfigGroup cg =3D KSharedConfig::openConfig()->group( "UiSettings" ); - int bottomleft =3D cg.readEntry( "BottomLeftCornerOwner", 0 ); - int bottomright =3D cg.readEntry( "BottomRightCornerOwner", 0 ); + const KConfigGroup cg =3D KSharedConfig::openConfig()->group( "UiSetti= ngs" ); + const int bottomleft =3D cg.readEntry( "BottomLeftCornerOwner", 0 ); + const int bottomright =3D cg.readEntry( "BottomRightCornerOwner", 0 ); qCDebug(SHELL) << "Bottom Left:" << bottomleft; qCDebug(SHELL) << "Bottom Right:" << bottomright; = @@ -125,6 +120,16 @@ MainWindow::MainWindow( Sublime::Controller *parent, Q= t::WindowFlags flags ) setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); else if( bottomright =3D=3D 1 ) setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea ); +} + +MainWindow::MainWindow( Sublime::Controller *parent, Qt::WindowFlags flags= ) + : Sublime::MainWindow( parent, flags ) +{ + QDBusConnection::sessionBus().registerObject( QStringLiteral("/kdevelo= p/MainWindow"), + this, QDBusConnection::ExportScriptableSlots ); + + setAcceptDrops( true ); + initializeCorners(); = setObjectName( QStringLiteral("MainWindow") ); d =3D new MainWindowPrivate(this); @@ -213,24 +218,7 @@ void MainWindow::dropEvent( QDropEvent* ev ) void MainWindow::loadSettings() { qCDebug(SHELL) << "Loading Settings"; - KConfigGroup cg =3D KSharedConfig::openConfig()->group( "UiSettings" ); - - // dock widget corner layout - int bottomleft =3D cg.readEntry( "BottomLeftCornerOwner", 0 ); - int bottomright =3D cg.readEntry( "BottomRightCornerOwner", 0 ); - qCDebug(SHELL) << "Bottom Left:" << bottomleft; - qCDebug(SHELL) << "Bottom Right:" << bottomright; - - // 0 means vertical dock (left, right), 1 means horizontal dock( top, = bottom ) - if( bottomleft =3D=3D 0 ) - setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); - else if( bottomleft =3D=3D 1 ) - setCorner( Qt::BottomLeftCorner, Qt::BottomDockWidgetArea ); - - if( bottomright =3D=3D 0 ) - setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); - else if( bottomright =3D=3D 1 ) - setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea ); + initializeCorners(); = updateAllTabColors(); = diff --git a/shell/mainwindow.h b/shell/mainwindow.h index 35a6a61..f58ed98 100644 --- a/shell/mainwindow.h +++ b/shell/mainwindow.h @@ -106,6 +106,8 @@ private Q_SLOTS: void shortcutsChanged(); = private: + void initializeCorners(); + class MainWindowPrivate *d; friend class MainWindowPrivate; }; diff --git a/shell/partdocument.cpp b/shell/partdocument.cpp index 96cca90..132aad4 100644 --- a/shell/partdocument.cpp +++ b/shell/partdocument.cpp @@ -98,28 +98,23 @@ bool PartDocument::save(DocumentSaveMode /*mode*/) = bool PartDocument::askForCloseFeedback() { + int code =3D -1; if (state() =3D=3D IDocument::Modified) { - int code =3D KMessageBox::warningYesNoCancel( + code =3D KMessageBox::warningYesNoCancel( Core::self()->uiController()->activeMainWindow(), i18n("The document \"%1\" has unsaved changes. Would you like = to save them?", url().toLocalFile()), i18n("Close Document")); = - if (code =3D=3D KMessageBox::Yes) { - if (!save(Default)) - return false; - - } else if (code =3D=3D KMessageBox::Cancel) { - return false; - } - /// @todo Is this behavior right? } else if (state() =3D=3D IDocument::DirtyAndModified) { - int code =3D KMessageBox::warningYesNoCancel( + code =3D KMessageBox::warningYesNoCancel( Core::self()->uiController()->activeMainWindow(), i18n("The document \"%1\" has unsaved changes and was modified= by an external process.\n" "Do you want to override the external changes?", url().to= LocalFile()), i18n("Close Document")); + } = + if (code >=3D 0) { if (code =3D=3D KMessageBox::Yes) { if (!save(Default)) return false; @@ -127,8 +122,8 @@ bool PartDocument::askForCloseFeedback() } else if (code =3D=3D KMessageBox::Cancel) { return false; } - } + return true; } = diff --git a/shell/workingsetcontroller.cpp b/shell/workingsetcontroller.cpp index 22495a4..235e312 100644 --- a/shell/workingsetcontroller.cpp +++ b/shell/workingsetcontroller.cpp @@ -213,7 +213,7 @@ void WorkingSetController::showGlobalToolTip() connect(m_tooltip.data(), &ActiveToolTip::mouseOut, m_hideToolTipTimer= , static_cast(&QTimer::start)); } = -void WorkingSetController::nextDocument() +WorkingSetToolTipWidget* WorkingSetController::workingSetToolTip() { if(!m_tooltip) showGlobalToolTip(); @@ -225,22 +225,23 @@ void WorkingSetController::nextDocument() { WorkingSetToolTipWidget* widget =3D m_tooltip->findChild(); Q_ASSERT(widget); + return widget; + } + return nullptr; +} + +void WorkingSetController::nextDocument() +{ + auto widget =3D workingSetToolTip(); + if (widget) { widget->nextDocument(); } } = void WorkingSetController::previousDocument() { - if(!m_tooltip) - showGlobalToolTip(); - - m_hideToolTipTimer->stop(); - m_hideToolTipTimer->start(toolTipTimeout); - - if(m_tooltip) - { - WorkingSetToolTipWidget* widget =3D m_tooltip->findChild(); - Q_ASSERT(widget); + auto widget =3D workingSetToolTip(); + if (widget) { widget->previousDocument(); } } diff --git a/shell/workingsetcontroller.h b/shell/workingsetcontroller.h index 4511cc3..22e4309 100644 --- a/shell/workingsetcontroller.h +++ b/shell/workingsetcontroller.h @@ -42,6 +42,7 @@ class MainWindow; class Core; = class WorkingSet; +class WorkingSetToolTipWidget; = class WorkingSetController : public QObject { @@ -107,6 +108,7 @@ private slots: void clearWorkingSet(Sublime::Area* area); = private: + WorkingSetToolTipWidget* workingSetToolTip(); void setupActions(); const QString makeSetId(const QString& prefix) const; = diff --git a/sublime/idealcontroller.cpp b/sublime/idealcontroller.cpp index 64b2191..f14b9a0 100644 --- a/sublime/idealcontroller.cpp +++ b/sublime/idealcontroller.cpp @@ -366,6 +366,15 @@ void IdealController::showRightDock(bool show) showDock(Qt::RightDockWidgetArea, show); } = +void IdealController::hideDocks(IdealButtonBarWidget *bar) +{ + foreach (QAction *action, bar->actions()) { + if (action->isChecked()) + action->setChecked(false); + } + focusEditor(); +} + void IdealController::showDock(Qt::DockWidgetArea area, bool show) { IdealButtonBarWidget *bar =3D barForDockArea(area); @@ -385,12 +394,7 @@ void IdealController::showDock(Qt::DockWidgetArea area= , bool show) } = if (!show) { - // close all toolviews - foreach (QAction *action, bar->actions()) { - if (action->isChecked()) - action->setChecked(false); - } - focusEditor(); + hideDocks(bar); } else { // open the last opened toolview (or the first one) and focus it if (lastDock) { @@ -471,11 +475,7 @@ void IdealController::toggleDocksShown() void IdealController::toggleDocksShown(IdealButtonBarWidget* bar, bool sho= w) { if (!show) { - foreach (QAction *action, bar->actions()) { - if (action->isChecked()) - action->setChecked(false); - } - focusEditor(); + hideDocks(bar); } else { IdealDockWidget *lastDock =3D lastDockWidget[bar->area()].data(); if (lastDock) diff --git a/sublime/idealcontroller.h b/sublime/idealcontroller.h index 143057f..7ffdf1a 100644 --- a/sublime/idealcontroller.h +++ b/sublime/idealcontroller.h @@ -106,6 +106,7 @@ private Q_SLOTS: void loadSettings(); = private: + void hideDocks(IdealButtonBarWidget *bar); void showDock(Qt::DockWidgetArea area, bool show); void toggleDocksShown(IdealButtonBarWidget *bar, bool show); = diff --git a/sublime/mainwindow.cpp b/sublime/mainwindow.cpp index 731f98d..44e9a4f 100644 --- a/sublime/mainwindow.cpp +++ b/sublime/mainwindow.cpp @@ -338,18 +338,22 @@ bool MainWindow::queryClose() return KParts::MainWindow::queryClose(); } = -void MainWindow::saveGeometry(KConfigGroup &config) +QString MainWindow::screenKey() const { - int scnum =3D QApplication::desktop()->screenNumber(parentWidget()); + const int scnum =3D QApplication::desktop()->screenNumber(parentWidget= ()); QRect desk =3D QApplication::desktop()->screenGeometry(scnum); = // if the desktop is virtual then use virtual screen size if (QApplication::desktop()->isVirtualDesktop()) desk =3D QApplication::desktop()->screenGeometry(QApplication::des= ktop()->screen()); = - QString key =3D QStringLiteral("Desktop %1 %2") + return QStringLiteral("Desktop %1 %2") .arg(desk.width()).arg(desk.height()); - config.writeEntry(key, geometry()); +} + +void MainWindow::saveGeometry(KConfigGroup &config) +{ + config.writeEntry(screenKey(), geometry()); = } void MainWindow::loadGeometry(const KConfigGroup &config) @@ -359,16 +363,7 @@ void MainWindow::loadGeometry(const KConfigGroup &conf= ig) // as per http://permalink.gmane.org/gmane.comp.kde.devel.core/52423 // so we implement a less theoretically correct, but working, version // below - const int scnum =3D QApplication::desktop()->screenNumber(parentWidget= ()); - QRect desk =3D QApplication::desktop()->screenGeometry(scnum); - - // if the desktop is virtual then use virtual screen size - if (QApplication::desktop()->isVirtualDesktop()) - desk =3D QApplication::desktop()->screenGeometry(QApplication::des= ktop()->screen()); - - QString key =3D QStringLiteral("Desktop %1 %2") - .arg(desk.width()).arg(desk.height()); - QRect g =3D config.readEntry(key, QRect()); + QRect g =3D config.readEntry(screenKey(), QRect()); if (!g.isEmpty()) setGeometry(g); } diff --git a/sublime/mainwindow.h b/sublime/mainwindow.h index 4c13a7b..46fdaae 100644 --- a/sublime/mainwindow.h +++ b/sublime/mainwindow.h @@ -164,6 +164,8 @@ private: Q_PRIVATE_SLOT(d, void aboutToRemoveToolView(Sublime::View*, Sublime::= Position)) Q_PRIVATE_SLOT(d, void toolViewMoved(Sublime::View*, Sublime::Position= )) = + QString screenKey() const; + //Inherit MainWindowOperator to access four methods below /**Unsets the area clearing main window.*/ void clearArea(); diff --git a/util/multilevellistview.cpp b/util/multilevellistview.cpp index 1c507b6..127f25d 100644 --- a/util/multilevellistview.cpp +++ b/util/multilevellistview.cpp @@ -39,6 +39,15 @@ public: { m_label =3D label; } + + QVariant header(QAbstractItemModel* model, int section, Qt::Orientatio= n orientation, int role) const + { + if (model && section =3D=3D 0 && orientation =3D=3D Qt::Horizontal= && role =3D=3D Qt::DisplayRole) { + return m_label; + } else { + return QVariant(); + } + } protected: QString m_label; }; @@ -59,14 +68,9 @@ public: { return !source_parent.isValid(); } - QVariant headerData( int section, Qt::Orientation orientation, - int role =3D Qt::DisplayRole ) const over= ride + QVariant headerData( int section, Qt::Orientation orientation, int rol= e ) const override { - if (sourceModel() && section =3D=3D 0 && orientation =3D=3D Qt::Ho= rizontal && role =3D=3D Qt::DisplayRole) { - return m_label; - } else { - return QVariant(); - } + return header(sourceModel(), section, orientation, role); } }; = @@ -81,14 +85,9 @@ public: explicit SubTreeProxyModel( QItemSelectionModel* selectionModel, QObje= ct* parent =3D 0 ) : KSelectionProxyModel( selectionModel, parent ) {} - QVariant headerData( int section, Qt::Orientation orientation, - int role =3D Qt::DisplayRole ) const over= ride + QVariant headerData( int section, Qt::Orientation orientation, int rol= e ) const override { - if (sourceModel() && section =3D=3D 0 && orientation =3D=3D Qt::Ho= rizontal && role =3D=3D Qt::DisplayRole) { - return m_label; - } else { - return QVariant(); - } + return header(sourceModel(), section, orientation, role); } Qt::ItemFlags flags(const QModelIndex& index) const override {