[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/kickoff/simpleapplet
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2009-03-09 19:34:48
Message-ID: 1236627288.220312.3285.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 937498 by sebsauer:

more polishing

 M  +36 -78    menuview.cpp  
 M  +1 -1      menuview.h  
 M  +21 -22    simpleapplet.cpp  
 M  +1 -1      simpleapplet.h  


--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/simpleapplet/menuview.cpp \
#937497:937498 @@ -28,6 +28,8 @@
 #include <QtGui/QApplication>
 #include <QtGui/QMouseEvent>
 #include <QtGui/QStandardItem>
+#include <QtGui/QStyleOptionMenuItem>
+#include <QtGui/QPainter>
 
 // KDE
 #include <KDebug>
@@ -72,7 +74,6 @@
 
     void buildBranch(KMenu *menu, QAbstractItemModel *model, const QModelIndex& \
parent) {  const int rowCount = model->rowCount(parent);
-        //if (rowCount > 0 && menu->actions().count() > 0) menu->addSeparator();
         for (int i = 0; i < rowCount; i++) {
             QAction *action = createActionForIndex(model, model->index(i, column, \
parent), menu);  menu->addAction(action);
@@ -104,8 +105,9 @@
     delete d;
 }
 
-QAction *MenuView::createLeafAction(const QModelIndex&, QObject *parent)
+QAction *MenuView::createLeafAction(const QModelIndex &index, QObject *parent)
 {
+    Q_UNUSED(index);
     return new QAction(parent);
 }
 
@@ -231,7 +233,7 @@
             Q_ASSERT(index.isValid());
 
             const QString title = index.data(Qt::DisplayRole).value<QString>();
-            if (count > 1 && ! title.isEmpty())
+            if (count > 1 && ! title.isEmpty() && model->rowCount(index) > 0)
                 addTitle(title);
             
             model->blockSignals(true);
@@ -244,6 +246,7 @@
         d->buildBranch(this, model, QModelIndex());
     }
 
+//connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex, int, int)), this, \
                SLOT(rowsInserted(QModelIndex, int, int)));
     connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)), this, \
                SLOT(rowsInserted(QModelIndex, int, int)));
     connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), this, \
                SLOT(rowsAboutToBeRemoved(QModelIndex, int, int)));
     connect(model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, \
SLOT(dataChanged(QModelIndex, QModelIndex))); @@ -274,10 +277,8 @@
 
 QAction *MenuView::actionForIndex(const QModelIndex& index) const
 {
-    if (!index.isValid()) {
+    if (!index.isValid())
         return this->menuAction();
-    }
-
     const QAbstractItemModel *model = index.model();
     Q_ASSERT(model);
     QVariant v = model->data(index, Private::ActionRole);
@@ -296,14 +297,12 @@
 void MenuView::rowsInserted(const QModelIndex& parent, int start, int end)
 {
     kDebug()<<start<<end;
-#if 0
+
     Q_ASSERT(parent.isValid());
     Q_ASSERT(parent.model());
 
-    QAction *menuAction = actionForIndex(parent);
-    Q_ASSERT(menuAction);
-    QMenu *menu = menuAction->menu();
-    Q_ASSERT(menu);
+    //Q_ASSERT( ! isValidIndex(parent) );
+    QMenu *menu = isValidIndex(parent) ? actionForIndex(parent)->menu() : this;
 
     QAbstractItemModel *model = const_cast<QAbstractItemModel*>(parent.model());
     Q_ASSERT(model);
@@ -312,53 +311,31 @@
     for (int row = start; row <= end; row++) {
         QModelIndex index = model->index(row, d->column, parent);
         QAction *newAction = d->createActionForIndex(model, index, menu);
+        kDebug()<<"new action="<<newAction->text();
         newActions << newAction;
     }
 
-    int lastidx = 0;
-    int st = start;
-    for(int i = 0; i < menu->actions().count(); ++i) {
+    int lastidx = -1, offset = -1;
+    for (int i = 0; i < menu->actions().count(); ++i) {
         QAction *action = menu->actions()[i];
         Q_ASSERT(action);
         QModelIndex index = indexForAction(action);
-        if(index.isValid() && index.model() == model) {
+        if (index.isValid() && index.model() == model) {
             lastidx = i;
-            if(0 == st--)
+            if(++offset == start)
                 break;
         }
     }
-    if (lastidx < menu->actions().count()) {
-        menu->insertActions(menu->actions()[lastidx], newActions);
-    } else {
-        menu->addActions(newActions);
+    if (lastidx >= 0) {
+        if (offset < start)
+            lastidx++; // insert action the item right after the last valid index
+        if (lastidx < menu->actions().count())
+            menu->insertActions(menu->actions()[lastidx], newActions);
+        else
+            lastidx = -1;
     }
-
-    /*
-    //if (!isValidIndex(parent)) return; // can happen if the models data is \
                incomplete yet
-    QAbstractItemModel *model = const_cast<QAbstractItemModel*>(parent.model());
-    Q_ASSERT(model);
-    QAction *menuAction = actionForIndex(parent);
-    Q_ASSERT(menuAction);
-    QMenu *menu = menuAction->menu();
-    Q_ASSERT(menu);
-    QList<QAction*> newActions;
-    for (int row = start; row <= end; row++) {
-        QModelIndex index = model->index(row, d->column, parent);
-        QAction *newAction = d->createActionForIndex(model, index, menu);
-        newActions << newAction;
-    }
-    if (start < menu->actions().count()) {
-        menu->insertActions(menu->actions()[start], newActions);
-    } else {
+    if (lastidx < 0) // just append the action
         menu->addActions(newActions);
-    }
-    */
-#else
-    Q_UNUSED(parent);
-    Q_UNUSED(start);
-    Q_UNUSED(end);
-    modelReset();
-#endif
 }
 
 void MenuView::rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end)
@@ -367,10 +344,8 @@
 #if 0
     Q_ASSERT(parent.isValid());
     Q_ASSERT(parent.model());
-
     QAbstractItemModel *model = const_cast<QAbstractItemModel*>(parent.model());
     Q_ASSERT(model);
-
     for (int row = end; row >= start; --row) {
         QModelIndex index = model->index(row, d->column, parent);
         QAction *action = actionForIndex(index);
@@ -379,21 +354,15 @@
         Q_ASSERT(menu);
         menu->removeAction(action);
     }
-
     /*
     QAction *menuAction = 0;
-    if(parent.model()->data(parent, Private::ActionRole).isValid()) {
-        menuAction = actionForIndex(parent);
-    } else {
-    }
+    if(parent.model()->data(parent, Private::ActionRole).isValid()) menuAction = \
actionForIndex(parent);  Q_ASSERT(menuAction);
     QMenu *menu = menuAction->menu();
     Q_ASSERT(menu);
     QList<QAction*> actions = menu->actions();
     Q_ASSERT(end < actions.count());
-    for (int row = end; row >= start; row--) {
-        menu->removeAction(actions[row]);
-    }
+    for (int row = end; row >= start; row--) menu->removeAction(actions[row]);
     */
 #else
     Q_UNUSED(parent);
@@ -405,38 +374,26 @@
 
 void MenuView::dataChanged(const QModelIndex& topLeft, const QModelIndex& \
bottomRight)  {
-    kDebug();
-#if 0
-    Q_ASSERT(isValidIndex(topLeft));
-    Q_ASSERT(isValidIndex(bottomRight));
-    //if (!isValidIndex(parent)) return; // can happen if the models data is \
                incomplete yet
-
     QAbstractItemModel *model = const_cast<QAbstractItemModel*>(topLeft.model());
     Q_ASSERT(model);
 
-    QAction *menuAction = actionForIndex(topLeft.parent());
-    Q_ASSERT(menuAction);
+    //Q_ASSERT( ! isValidIndex(topLeft) );
+    QMenu *menu = isValidIndex(topLeft) ? actionForIndex(topLeft)->menu() : this;
 
-    QMenu *menu = menuAction->menu();
-    Q_ASSERT(menu);
-
     QList<QAction*> actions = menu->actions();
     Q_ASSERT(bottomRight.row() < actions.count());
 
-    for (int row = topLeft.row(); row <= bottomRight.row(); row++) {
-        updateAction(model, actions[row], model->index(row, d->column, \
topLeft.parent())); +    for (int row = topLeft.row(); row <= bottomRight.row() && \
row < actions.count(); ++row) { +        QModelIndex index = model->index(row, \
d->column, topLeft.parent()); +        \
kDebug()<<row<<index.data(Qt::DisplayRole).value<QString>(); +        \
updateAction(model, actions[row], index);  }
-#else
-    Q_UNUSED(topLeft);
-    Q_UNUSED(bottomRight);
-    modelReset();
-#endif
 }
 
 void MenuView::modelReset()
 {
-    // We need to force clearance of the menu and rebuild from scratch
-    deleteLater();
+    kDebug();
+    deleteLater(); // we need to force clearance of the menu and rebuild from \
scratch  }
 
 void MenuView::setColumn(int column)
@@ -467,10 +424,11 @@
         d->launcher->openUrl(url.url());
     } else {
         QModelIndex index = indexForAction(action);
-        if(index.isValid())
+        if(index.isValid()) {
             d->launcher->openItem(index);
-        else
+        } else {
             kWarning()<<"Invalid action \
objectName="<<action->objectName()<<"text="<<action->text()<<"parent="<<(action->parent()?action->parent()->metaObject()->className():"NULL");
 +        }
     }
 }
 
--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/simpleapplet/menuview.h \
#937497:937498 @@ -137,7 +137,7 @@
     virtual void updateAction(QAbstractItemModel *model, QAction *action, const \
QModelIndex& index);  
     // reimplemented
-    virtual bool eventFilter(QObject * watched, QEvent *event);
+    virtual bool eventFilter(QObject *watched, QEvent *event);
 
 public Q_SLOTS:
     /**
--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/simpleapplet/simpleapplet.cpp \
#937497:937498 @@ -148,6 +148,16 @@
             combo->setCurrentIndex(0);
     }
 
+    void addModel(QAbstractItemModel *model, ViewType viewtype, \
Kickoff::MenuView::ModelOptions options = Kickoff::MenuView::MergeFirstLevel, int \
formattype = -1) { +        Kickoff::MenuView* m = menuview;
+        if(viewtypes.count() > 1) {
+            m = new Kickoff::MenuView(menuview, viewText(viewtype), \
KIcon(viewIcon(viewtype))); +            m->setFormatType(formattype >= 0 ? \
(Kickoff::MenuView::FormatType)formattype : menuview->formatType()); +            \
menuview->addMenu(m); +        }
+        m->addModel(model, options);
+    }
+
     QString viewText(MenuLauncherApplet::ViewType vt) const {
         switch (vt) {
             case Favorites:                return i18n("Favorites");
@@ -479,34 +489,30 @@
         connect(d->menuview, SIGNAL(aboutToHide()), d->icon, SLOT(setUnpressed()));
         //connect(d->menuview, SIGNAL(afterBeingHidden()), d->menuview, \
SLOT(deleteLater()));  
-        Kickoff::MenuView::ModelOptions options = d->viewtypes.count() < 2 ? \
Kickoff::MenuView::MergeFirstLevel : Kickoff::MenuView::None; +        \
//Kickoff::MenuView::ModelOptions options = d->viewtypes.count() < 2 ? \
Kickoff::MenuView::MergeFirstLevel : Kickoff::MenuView::None;  foreach(QString \
vtname, d->viewtypes) {  if(vtname == "Applications") {
-                if(d->menuview->actions().count() > 0)
-                    d->menuview->addSeparator();
                 Kickoff::ApplicationModel *appModel = new \
                Kickoff::ApplicationModel(d->menuview);
                 appModel->setDuplicatePolicy(Kickoff::ApplicationModel::ShowLatestOnlyPolicy);
                
                 if (d->formattype == Name || d->formattype == NameDescription || \
                d->formattype == NameDashDescription)
                     \
                appModel->setPrimaryNamePolicy(Kickoff::ApplicationModel::AppNamePrimary);
                
                 appModel->setSystemApplicationPolicy(Kickoff::ApplicationModel::ShowApplicationAndSystemPolicy);
  d->menuview->addModel(appModel);
+                d->menuview->addSeparator();
             } else if(vtname == "Favorites") {
-                if(d->menuview->actions().count() > 0)
-                    d->menuview->addSeparator();
-                d->menuview->addModel(new Kickoff::FavoritesModel(d->menuview), \
options); +                d->addModel(new Kickoff::FavoritesModel(d->menuview), \
Favorites);  } else if(vtname == "Computer") {
-                d->menuview->addModel(new Kickoff::SystemModel(d->menuview), \
options); +                d->addModel(new Kickoff::SystemModel(d->menuview), \
Computer);  } else if(vtname == "RecentlyUsed") {
-                d->menuview->addModel(new Kickoff::RecentlyUsedModel(d->menuview), \
options); +                d->addModel(new Kickoff::RecentlyUsedModel(d->menuview), \
RecentlyUsed);  } else if(vtname == "RecentlyUsedApplications") {
-                if(d->menuview->actions().count() > 0)
-                    d->menuview->addSeparator();
-                if (d->maxRecentApps > 0)
+                if (d->maxRecentApps > 0) {
                     d->menuview->addModel(new \
Kickoff::RecentlyUsedModel(d->menuview, Kickoff::RecentlyUsedModel::ApplicationsOnly, \
                d->maxRecentApps), Kickoff::MenuView::MergeFirstLevel);
-            } else if(vtname == "RecentlyUsedDocuments") {
-                if(d->menuview->actions().count() > 0)
                     d->menuview->addSeparator();
+                }
+            } else if(vtname == "RecentlyUsedDocuments") {
                 d->menuview->addModel(new Kickoff::RecentlyUsedModel(d->menuview, \
Kickoff::RecentlyUsedModel::DocumentsOnly), Kickoff::MenuView::MergeFirstLevel); +    \
d->menuview->addSeparator();  } else if(vtname == "Bookmarks") {
                 KMenu* menu = d->menuview;
                 if(d->viewtypes.count() > 1) {
@@ -582,15 +588,9 @@
             } else if(vtname == "Logout") {
                 d->menuview->addAction(KIcon(d->viewIcon(Logout)), \
d->viewText(Logout))->setData(KUrl("leave:/logout"));  } else if(vtname == "Leave") {
-                Kickoff::MenuView* parentmenu = d->menuview;
-                if(d->viewtypes.count() > 1) {
-                    parentmenu = new Kickoff::MenuView(d->menuview, \
                d->viewText(Leave), KIcon(d->viewIcon(Leave)));
-                    parentmenu->setFormatType(Kickoff::MenuView::Description);
-                    d->menuview->addMenu(parentmenu);
-                }
-                Kickoff::LeaveModel *leavemodel = new \
Kickoff::LeaveModel(parentmenu); +                Kickoff::LeaveModel *leavemodel = \
new Kickoff::LeaveModel(d->menuview);  leavemodel->updateModel();
-                parentmenu->addModel(leavemodel, \
Kickoff::MenuView::MergeFirstLevel); +                d->addModel(leavemodel, Leave, \
Kickoff::MenuView::MergeFirstLevel, Kickoff::MenuView::Description);  } else {
 #ifndef Q_WS_WIN
                 Solid::Control::PowerManager::SuspendMethods spdMethods = \
Solid::Control::PowerManager::supportedSuspendMethods(); @@ -645,5 +645,4 @@
     return d->actions;
 }
 
-
 #include "simpleapplet.moc"
--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/simpleapplet/simpleapplet.h \
#937497:937498 @@ -45,9 +45,9 @@
         RecentlyUsedDocuments, ///< Recently Used Documents Menu
         Applications, ///< Applications Menu
         Favorites, ///< Favorites Menu
+        Bookmarks, ///< Bookmarks Menu
         Computer, ///< Computer Menu
         RecentlyUsed, ///< Recently Used Menu
-        Bookmarks, ///< Bookmarks Menu
         Settings, ///< Settings Menu
         RunCommand, ///< Run Command Action
         SwitchUser, ///< Switch User Action


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic