The future of KAction
Olivier Goffart
ogoffart at kde.org
Fri Nov 11 21:44:25 GMT 2005
Le Vendredi 11 Novembre 2005 20:06, David Faure a écrit :
> On Friday 11 November 2005 07:38, Hamish Rodda wrote:
> > The other big change that I can see is that the plugging and unplugging
> > moves to be each widget's responsibility.
>
> That's the huge change, which I'm not too comfortable with.
> If you want a special action in a toolbar, like say a koffice-color-chooser
> toolbar button with popup, the solution was to inherit from KAction and
> reimplement plug. But if now the responsibility is in the widget, how do we
> do that? Subclassing QToolbar in an application sounds like the really
> wrong way to attack the problem, doesn't it?
>
> (Of course this example has other solutions, like a way to set a popup to a
> standard toolbar button, but there are many other cases of custom
> actions...)
proposed solution:
class KAction : public QAction {
//...
/**
* @return a widget that will be plugged in the toolbar
* @param parent the parent of the returned widget
* if null is returned, QToolbar will be responsible of creating the widget
* default implementation return null
*/
virtual QWidget *toolBarWidget(QWidget *parent);
};
KToolBar::actionEvent(QActionEvent *event)
{//...
QWidget *w = kaction->toolBarWidget(this);
if(w)
layout()->insertWidget(position, w);
else
QToolBar::actionEvent(event);
}
Of course this require to use KToolBar, but i think we can consider that a KDE
application will use KToolBar
> > * the activated() signal with the activation reason. I can't see the
> > required hooks anywhere.
>
> Please look in kbookmarkbar and kbookmarkmenu, as well as konq.
> This allows to detect RMB, Shift+LMB, Ctrl+LMB, Shift+LMB on MenuItem (for
> trash) etc. I would very much hate to lose those features after having
> worked on adding them to 3.4 ... (you saw the @since, right? :)
I can't find a nice solution.
one can add a KAction::reason() and re-implement KAction::event
KMenu::event KToolbar::event to set the reason. wow, that's complex
> > 3) KAction subclass issues
> > Some would be kept, others are not required any more given QActionGroup's
> > capabilities.
>
> But what's the point of a subclass if it can't customize the way the action
> looks like, when plugged in? How do we get a KLineEdit, a KComboBox, a
> KToolbarButton etc.?
That's solved in #1
> > 4) Other issues
> > For KShortcut, it would probably be easiest to replace with QKeySequence,
> > or subclass QKeySequence.
>
> No. KKeySequence uses QKeySequence already, but KShortCut is one level
> above that, it allows *alternative* key sequences for a given action. E.g.
> Ctrl+C and Ctrl+Insert are two alternatives for "Copy".
the solution could be is the same as #2 re-implement everything to get it
work with KShortcut
But if we have to re-implement everything, what are the benefits of QAction
So even if it is possible to work around everything, what are the benefit of
QAction ?
- there is some function in QWidget to handle action
-> but it is easy do without it
- most of the code is already coded by TrollTech
-> not a gain if we have to code 10x more to work around above problems
QAction is not even designed to be subclassed (it has no virtual method)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20051111/2f536e04/attachment.sig>
More information about the kde-core-devel
mailing list