@@ -8,6 +8,7 @@ module FF.Qt.EDSL where
88
99import Data.Foldable (for_ )
1010import Graphics.UI.Qtah.Core.Types qualified as Qt
11+ import Graphics.UI.Qtah.Widgets.QBoxLayout (QBoxLayoutPtr )
1112import Graphics.UI.Qtah.Widgets.QBoxLayout qualified as QBoxLayout
1213import Graphics.UI.Qtah.Widgets.QFormLayout qualified as QFormLayout
1314import Graphics.UI.Qtah.Widgets.QFrame (QFrame )
@@ -20,9 +21,10 @@ import Graphics.UI.Qtah.Widgets.QLayout (QLayoutPtr (toQLayout))
2021import Graphics.UI.Qtah.Widgets.QScrollArea (QScrollArea )
2122import Graphics.UI.Qtah.Widgets.QScrollArea qualified as QScrollArea
2223import Graphics.UI.Qtah.Widgets.QSizePolicy (QSizePolicyPolicy )
24+ import Graphics.UI.Qtah.Widgets.QVBoxLayout qualified as QVBoxLayout
2325import Graphics.UI.Qtah.Widgets.QWidget (QWidgetPtr , toQWidget )
2426import Graphics.UI.Qtah.Widgets.QWidget qualified as QWidget
25- import Named (arg , (:!) )
27+ import Named (arg , argF , (:!) , (:? ) )
2628
2729data QBoxLayoutItem
2830 = Stretch
@@ -33,22 +35,32 @@ data QFormLayoutItem
3335 | forall a . (QWidgetPtr a ) => RowWidget (IO a )
3436 | forall a . (QLayoutPtr a ) => StringLayout String a
3537
36- -- newtype Layout = QFormLayout [QFormLayoutItem]
38+ data Layout
39+ = QFormLayout [QFormLayoutItem ]
40+ | QVBoxLayout [QBoxLayoutItem ]
3741
38- qFrame :: [ QFormLayoutItem ] -> IO QFrame
39- qFrame items = do
42+ qFrame :: Layout -> IO QFrame
43+ qFrame lo = do
4044 obj <- QFrame. new
41- -- case lo of
42- -- QFormLayout items -> do
43- form <- QFormLayout. newWithParent obj
44- for_ items $ addRow form
45+ case lo of
46+ QFormLayout items -> do
47+ form <- QFormLayout. newWithParent obj
48+ for_ items $ addRow form
49+ QVBoxLayout items -> do
50+ box <- QVBoxLayout. newWithParent obj
51+ for_ items $ addBoxLayoutItem box
4552 pure obj
4653 where
4754 addRow form = \ case
4855 RowLayout io -> QFormLayout. addRowLayout form . toQLayout =<< io
4956 RowWidget io -> QFormLayout. addRowWidget form . toQWidget =<< io
5057 StringLayout s c -> QFormLayout. addRowStringLayout form s $ toQLayout c
5158
59+ addBoxLayoutItem :: (QBoxLayoutPtr p ) => p -> QBoxLayoutItem -> IO ()
60+ addBoxLayoutItem box = \ case
61+ Stretch -> QBoxLayout. addStretch box
62+ Widget io -> QBoxLayout. addWidget box =<< io
63+
5264hline :: IO QFrame
5365hline = do
5466 obj <- QFrame. new
@@ -58,31 +70,29 @@ hline = do
5870qHBoxLayout :: [QBoxLayoutItem ] -> IO QHBoxLayout
5971qHBoxLayout items = do
6072 obj <- QHBoxLayout. new
61- for_ items \ case
62- Stretch -> QBoxLayout. addStretch obj
63- Widget io -> QBoxLayout. addWidget obj =<< io
73+ for_ items $ addBoxLayoutItem obj
6474 pure obj
6575
6676qLabel ::
6777 (Qt. IsQtTextInteractionFlags textInteractionFlags ) =>
6878 " alignment" :! Qt. QtAlignmentFlag ->
6979 " openExternalLinks" :! Bool ->
70- " sizePolicy" :! (QSizePolicyPolicy , QSizePolicyPolicy ) ->
80+ " sizePolicy" :? (QSizePolicyPolicy , QSizePolicyPolicy ) ->
7181 " textInteractionFlags" :! textInteractionFlags ->
7282 " textFormat" :! Qt. QtTextFormat ->
7383 " wordWrap" :! Bool ->
7484 IO QLabel
7585qLabel
7686 (arg # alignment -> a)
7787 (arg # openExternalLinks -> oel)
78- (arg # sizePolicy -> (sp1, sp2) )
88+ (argF # sizePolicy -> sp )
7989 (arg # textInteractionFlags -> tif)
8090 (arg # textFormat -> tf)
8191 (arg # wordWrap -> ww) = do
8292 obj <- QLabel. new
8393 QLabel. setAlignment obj a
8494 QLabel. setOpenExternalLinks obj oel
85- QWidget. setSizePolicyRaw obj sp1 sp2
95+ for_ sp \ (sp1, sp2) -> QWidget. setSizePolicyRaw obj sp1 sp2
8696 QLabel. setTextInteractionFlags obj tif
8797 QLabel. setTextFormat obj tf
8898 QLabel. setWordWrap obj ww
@@ -92,4 +102,5 @@ qScrollArea :: (QWidgetPtr widget) => widget -> IO QScrollArea
92102qScrollArea w = do
93103 obj <- QScrollArea. new
94104 QScrollArea. setWidget obj w
105+ QScrollArea. setWidgetResizable obj True
95106 pure obj
0 commit comments