Skip to content

Commit e7d91cb

Browse files
committed
Add postpone button
1 parent fb05d0f commit e7d91cb

File tree

5 files changed

+64
-50
lines changed

5 files changed

+64
-50
lines changed

ff-qtah/FF/Qt/DateComponent.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,30 @@ import Graphics.UI.Qtah.Widgets.QPushButton qualified as QPushButton
1818
import Graphics.UI.Qtah.Widgets.QWidget qualified as QWidget
1919

2020
data DateComponent = DateComponent
21-
{ box :: QHBoxLayout
21+
{ parent :: QHBoxLayout
2222
, date :: QDateEdit
2323
, add :: QPushButton
2424
, remove :: QPushButton
2525
}
2626

2727
new :: IO DateComponent
2828
new = do
29-
box <- QHBoxLayout.new
29+
parent <- QHBoxLayout.new
3030

3131
date <- QDateEdit.new
3232
QDateTimeEdit.setCalendarPopup date True
3333
QDateTimeEdit.setDisplayFormat date "ddd d MMM yyyy"
34-
QBoxLayout.addWidget box date
34+
QBoxLayout.addWidget parent date
3535

36-
add <- QPushButton.newWithText "+"
36+
add <- QPushButton.newWithText "➕ Set"
3737
QWidget.setEnabled add False
38-
QBoxLayout.addWidget box add
38+
QBoxLayout.addWidget parent add
3939

40-
remove <- QPushButton.newWithText ""
40+
remove <- QPushButton.newWithText ""
4141
QWidget.setEnabled remove False
42-
QBoxLayout.addWidget box remove
42+
QBoxLayout.addWidget parent remove
4343

44-
let this = DateComponent{box, date, add, remove}
44+
let this = DateComponent{parent, date, add, remove}
4545
setEditable this False
4646
pure this
4747

ff-qtah/FF/Qt/MainWindow.hs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
{-# LANGUAGE TypeApplications #-}
77

88
module FF.Qt.MainWindow (
9-
MainWindow (super),
9+
MainWindow (parent),
1010
new,
1111
upsertNote,
1212
) where
@@ -55,35 +55,35 @@ import FF.Qt.TaskWidget (TaskWidget)
5555
import FF.Qt.TaskWidget qualified as TaskWidget
5656

5757
data MainWindow = MainWindow
58-
{ super :: QMainWindow
58+
{ parent :: QMainWindow
5959
, agendaTasks :: TaskListWidget
6060
, taskWidget :: TaskWidget
6161
}
6262

6363
new :: String -> Storage.Handle -> IO MainWindow
6464
new progName storage = do
65-
super <- QMainWindow.new
66-
QWidget.setWindowTitle super progName
65+
parent <- QMainWindow.new
66+
QWidget.setWindowTitle parent progName
6767

68-
restoreGeometry super -- must be before widgets creation
68+
restoreGeometry parent -- must be before widgets creation
6969

7070
-- UI setup and widgets creation
7171
agendaSplitter <- QSplitter.new
7272
QSplitter.setChildrenCollapsible agendaSplitter False
73-
QMainWindow.setCentralWidget super agendaSplitter
73+
QMainWindow.setCentralWidget parent agendaSplitter
7474

7575
agendaTasks <- TaskListWidget.new
76-
QSplitter.addWidget agendaSplitter agendaTasks.super
76+
QSplitter.addWidget agendaSplitter agendaTasks.parent
7777

7878
taskWidget <- TaskWidget.new storage
79-
QWidget.hide taskWidget.super
80-
QSplitter.addWidget agendaSplitter taskWidget.super
79+
QWidget.hide taskWidget.parent
80+
QSplitter.addWidget agendaSplitter taskWidget.parent
8181

8282
-- sizes need widgets to be added
8383
QSplitter.setSizes agendaSplitter [1, 1 :: Int]
8484

8585
do
86-
menuBar <- QMainWindow.menuBar super
86+
menuBar <- QMainWindow.menuBar parent
8787
do
8888
debugMenu <- QMenuBar.addNewMenu menuBar "&Debug"
8989
showUuidsAction <-
@@ -96,16 +96,16 @@ new progName storage = do
9696
aboutProgramAction <- QMenu.addNewAction helpMenu "&About ff"
9797
connect_ aboutProgramAction QAction.triggeredSignal $
9898
const $
99-
showAboutProgram super progName
99+
showAboutProgram parent progName
100100

101-
restoreState super -- must be after widgets creation
102-
let mainWindow = MainWindow{super, agendaTasks, taskWidget}
101+
restoreState parent -- must be after widgets creation
102+
let mainWindow = MainWindow{parent, agendaTasks, taskWidget}
103103

104104
-- handling events
105-
void $ onEvent super \(_ :: QCloseEvent) -> saveGeometryAndState super
105+
void $ onEvent parent \(_ :: QCloseEvent) -> saveGeometryAndState parent
106106
-- TODO
107107
-- connect_ editor QTextEdit.textChangedSignal $ saveTheText storage editor
108-
connect_ agendaTasks.super QTreeWidget.itemSelectionChangedSignal $
108+
connect_ agendaTasks.parent QTreeWidget.itemSelectionChangedSignal $
109109
resetTaskView mainWindow
110110

111111
pure mainWindow
@@ -140,15 +140,15 @@ loadSetting name =
140140

141141
resetTaskView :: MainWindow -> IO ()
142142
resetTaskView MainWindow{agendaTasks, taskWidget} = do
143-
items <- QTreeWidget.selectedItems agendaTasks.super
143+
items <- QTreeWidget.selectedItems agendaTasks.parent
144144
taskItems <-
145145
fold <$> for items \item -> do
146146
itemType <- itemTypeFromInt <$> QTreeWidgetItem.getType item
147147
pure case itemType of
148148
Task -> [item]
149149
ModeGroup -> []
150150
case taskItems of
151-
[] -> QWidget.hide taskWidget.super
151+
[] -> QWidget.hide taskWidget.parent
152152
[item] -> setTaskView taskWidget item
153153
_ : _ : _ -> print "TODO open/replace group actions view"
154154

@@ -161,7 +161,7 @@ setTaskView taskWidget item = do
161161
Task -> do
162162
noteId <- DocId @Note <$> TaskListWidget.getId item
163163
TaskWidget.update taskWidget noteId
164-
QWidget.show taskWidget.super
164+
QWidget.show taskWidget.parent
165165

166166
showAboutProgram :: (QWidgetPtr mainWindow) => mainWindow -> String -> IO ()
167167
showAboutProgram mainWindow progName =

ff-qtah/FF/Qt/TaskListWidget.hs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module FF.Qt.TaskListWidget (
77
ItemType (..),
88
itemTypeFromInt,
99
itemTypeToInt,
10-
TaskListWidget (super),
10+
TaskListWidget (parent),
1111
getId,
1212
getTitle,
1313
new,
@@ -46,7 +46,7 @@ import FF.Types (
4646
import FF.UI (sampleLabel)
4747

4848
data TaskListWidget = TaskListWidget
49-
{super :: QTreeWidget, modeItems :: IORef (Map TaskMode QTreeWidgetItem)}
49+
{parent :: QTreeWidget, modeItems :: IORef (Map TaskMode QTreeWidgetItem)}
5050

5151
{- | Value order in this enumeration defines the field order in the tree widget.
5252
0th column mustn't be hideable, because when 0th column is hidden,
@@ -82,26 +82,26 @@ getTitle item = QTreeWidgetItem.text item $ fromEnum TitleField
8282

8383
new :: IO TaskListWidget
8484
new = do
85-
super <- QTreeWidget.new
86-
QAbstractItemView.setAlternatingRowColors super True
87-
QTreeView.setHeaderHidden super True
88-
QTreeWidget.setColumnCount super fieldCount
85+
parent <- QTreeWidget.new
86+
QAbstractItemView.setAlternatingRowColors parent True
87+
QTreeView.setHeaderHidden parent True
88+
QTreeWidget.setColumnCount parent fieldCount
8989

9090
modeItems <- newIORef mempty
9191

92-
let this = TaskListWidget{super, modeItems}
92+
let this = TaskListWidget{parent, modeItems}
9393

9494
setDebugInfoVisible this False
9595

9696
pure this
9797

9898
setDebugInfoVisible :: TaskListWidget -> Bool -> IO ()
9999
setDebugInfoVisible this =
100-
QTreeView.setColumnHidden this.super (fromEnum IdField) . not
100+
QTreeView.setColumnHidden this.parent (fromEnum IdField) . not
101101

102102
-- Only insertion is implemeted. TODO implement update.
103103
upsertTask :: TaskListWidget -> EntityView Note -> IO ()
104-
upsertTask TaskListWidget{super, modeItems} Entity{entityId, entityVal} = do
104+
upsertTask TaskListWidget{parent, modeItems} Entity{entityId, entityVal} = do
105105
today <- utctDay <$> getCurrentTime
106106
let mode = taskMode today note
107107
mModeItem <- Map.lookup mode <$> readIORef modeItems
@@ -111,7 +111,7 @@ upsertTask TaskListWidget{super, modeItems} Entity{entityId, entityVal} = do
111111
Nothing -> do
112112
item <-
113113
QTreeWidgetItem.newWithParentTreeAndStringsAndType
114-
super
114+
parent
115115
( fieldsToStrings \case
116116
IdField -> show mode
117117
TitleField -> Text.unpack $ sampleLabel mode

ff-qtah/FF/Qt/TaskWidget.hs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22
{-# LANGUAGE OverloadedRecordDot #-}
33

44
module FF.Qt.TaskWidget (
5-
TaskWidget (super),
5+
TaskWidget (parent),
66
new,
77
update,
88
) where
99

1010
-- global
1111
import Foreign.Hoppy.Runtime (toGc)
1212
import Graphics.UI.Qtah.Core.Types (QtAlignmentFlag (AlignTop))
13+
import Graphics.UI.Qtah.Widgets.QBoxLayout qualified as QBoxLayout
1314
import Graphics.UI.Qtah.Widgets.QFormLayout qualified as QFormLayout
1415
import Graphics.UI.Qtah.Widgets.QFrame (QFrame)
1516
import Graphics.UI.Qtah.Widgets.QFrame qualified as QFrame
17+
import Graphics.UI.Qtah.Widgets.QHBoxLayout qualified as QHBoxLayout
1618
import Graphics.UI.Qtah.Widgets.QLabel (QLabel)
1719
import Graphics.UI.Qtah.Widgets.QLabel qualified as QLabel
20+
import Graphics.UI.Qtah.Widgets.QPushButton qualified as QPushButton
1821
import Graphics.UI.Qtah.Widgets.QScrollArea (QScrollArea)
1922
import Graphics.UI.Qtah.Widgets.QScrollArea qualified as QScrollArea
2023
import Graphics.UI.Qtah.Widgets.QSizePolicy (QSizePolicy, QSizePolicyPolicy)
@@ -38,38 +41,49 @@ import FF.Qt.DateComponent (DateComponent)
3841
import FF.Qt.DateComponent qualified as DateComponent
3942

4043
data TaskWidget = TaskWidget
41-
{ super :: QScrollArea
42-
, frame :: QFrame
43-
-- ^ widget inside the scroll area
44+
{ parent :: QScrollArea
45+
, innerWidget :: QFrame
46+
-- ^ the main widget inside the scroll area
4447
, textContent :: QLabel
45-
-- ^ label for the text
4648
, storage :: Storage.Handle
4749
, start :: DateComponent
4850
, end :: DateComponent
4951
}
5052

5153
new :: Storage.Handle -> IO TaskWidget
5254
new storage = do
53-
super <- QScrollArea.new
55+
parent <- QScrollArea.new
5456

55-
frame <- QFrame.new
56-
QScrollArea.setWidget super frame
57+
innerWidget <- QFrame.new
58+
QScrollArea.setWidget parent innerWidget
5759

5860
textContent <- QLabel.new
5961
QWidget.setSizePolicy textContent
6062
=<< makeSimpleSizePolicy QSizePolicy.MinimumExpanding
6163
QLabel.setAlignment textContent AlignTop
6264
QLabel.setWordWrap textContent True
6365

66+
hline <- QFrame.new
67+
QFrame.setFrameShape hline QFrame.HLine
68+
6469
start <- DateComponent.new
70+
6571
end <- DateComponent.new
6672

67-
form <- QFormLayout.newWithParent frame
73+
form <- QFormLayout.newWithParent innerWidget
6874
QFormLayout.addRowWidget form textContent
69-
QFormLayout.addRowStringLayout form "Start:" start.box
70-
QFormLayout.addRowStringLayout form "Deadline:" end.box
75+
QFormLayout.addRowWidget form hline
76+
QFormLayout.addRowStringLayout form "Start:" start.parent
77+
QFormLayout.addRowStringLayout form "Deadline:" end.parent
78+
79+
postpone <- QPushButton.newWithText "Postpone"
80+
81+
actions <- QHBoxLayout.new
82+
QBoxLayout.addWidget actions postpone
83+
QBoxLayout.addStretch actions
84+
QFormLayout.addRowLayout form actions
7185

72-
pure TaskWidget{super, frame, textContent, storage, start, end}
86+
pure TaskWidget{parent, innerWidget, textContent, storage, start, end}
7387

7488
update :: TaskWidget -> NoteId -> IO ()
7589
update this noteId = do
@@ -79,7 +93,7 @@ update this noteId = do
7993
QLabel.setText this.textContent $ fromRgaM note_text
8094
DateComponent.setDate this.start note_start
8195
DateComponent.setDate this.end note_end
82-
QWidget.adjustSize this.frame
96+
QWidget.adjustSize this.innerWidget
8397

8498
makeSimpleSizePolicy :: QSizePolicyPolicy -> IO QSizePolicy
8599
makeSimpleSizePolicy policy =

ff-qtah/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ main = do
5151
withApp \_ -> do
5252
setupApp
5353
window <- MainWindow.new progName storage
54-
QWidget.show window.super
54+
QWidget.show window.parent
5555
initializeAsync storage window
5656
whenUIIdle $ checkDBChange storage window changedDocs
5757
QCoreApplication.exec

0 commit comments

Comments
 (0)