Recommended way of extending widgets
I found myself writing such code while trying to extend QTreeWidget
data TaskListWidget = TaskListWidget
{super :: QTreeWidget, modeItems :: IORef (Map TaskMode QTreeWidgetItem)}
instance CppPtr TaskListWidget where
nullptr = TaskListWidget{super = nullptr, modeItems = undefined}
withCppPtr TaskListWidget{super} proc = withCppPtr super $ proc . castPtr
toPtr = castPtr . toPtr . super
touchCppPtr = touchCppPtr . super
instance QObjectConstPtr TaskListWidget where
toQObjectConst = toQObjectConst . super
instance QObjectPtr TaskListWidget where
toQObject = toQObject . super
instance QWidgetConstPtr TaskListWidget where
toQWidgetConst = toQWidgetConst . super
instance QWidgetPtr TaskListWidget where
toQWidget = toQWidget . super
instance QAbstractScrollAreaConstPtr TaskListWidget where
toQAbstractScrollAreaConst = toQAbstractScrollAreaConst . super
instance QAbstractScrollAreaPtr TaskListWidget where
toQAbstractScrollArea = toQAbstractScrollArea . super
instance QAbstractItemViewConstPtr TaskListWidget where
toQAbstractItemViewConst = toQAbstractItemViewConst . super
instance QAbstractItemViewPtr TaskListWidget where
toQAbstractItemView = toQAbstractItemView . super
instance QTreeViewConstPtr TaskListWidget where
toQTreeViewConst = toQTreeViewConst . super
instance QTreeViewPtr TaskListWidget where
toQTreeView = toQTreeView . super
instance QTreeWidgetConstPtr TaskListWidget where
toQTreeWidgetConst = toQTreeWidgetConst . super
instance QTreeWidgetPtr TaskListWidget where
toQTreeWidget = toQTreeWidget . super
-
Is it a good way to extend a widget?
-
How to cope with the boilerplate?
-
nullptr
implementation is the ugliest. Is it really needed? Can it be replaced withisNull :: cppPtr -> Bool
?
Edited by Yuriy Syrovetskiy