[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