Skip to content

Commit 5ef52c3

Browse files
committed
Close task view on postpone
1 parent 254d5ed commit 5ef52c3

3 files changed

Lines changed: 24 additions & 13 deletions

File tree

ff-qtah/FF/Qt/MainWindow.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ new progName storage = do
115115

116116
-- | Only task notes are supported. TODO support wiki notes too
117117
upsertNote :: MainWindow -> EntityView Note -> IO ()
118-
upsertNote MainWindow{agendaTasks} = TaskListWidget.upsertTask agendaTasks
118+
upsertNote MainWindow{agendaTasks} = TaskListWidget.upsertTask agendaTasks True
119119

120120
-- https://wiki.qt.io/Saving_Window_Size_State
121121
saveGeometryAndState :: (QMainWindowPtr window) => window -> IO Bool

ff-qtah/FF/Qt/TaskListWidget.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import Data.Map.Strict (Map, (!))
2222
import Data.Map.Strict qualified as Map
2323
import Data.Text qualified as Text
2424
import Data.Time (getCurrentTime, toGregorian, utctDay)
25-
import Foreign.Hoppy.Runtime (fromCppEnum, toGc)
25+
import Foreign.Hoppy.Runtime (fromCppEnum, nullptr, toGc)
2626
import Graphics.UI.Qtah.Core.Types qualified as Qt
2727
import Graphics.UI.Qtah.Gui.QFont (QFont)
2828
import Graphics.UI.Qtah.Gui.QFont qualified as QFont
@@ -115,8 +115,8 @@ setDebugInfoVisible this v = do
115115
QTreeView.setColumnHidden this.parent (fromEnum SortKeyField) $ not v
116116
QTreeView.setHeaderHidden this.parent $ not v
117117

118-
upsertTask :: TaskListWidget -> EntityView Note -> IO ()
119-
upsertTask this entity = do
118+
upsertTask :: TaskListWidget -> Bool -> EntityView Note -> IO ()
119+
upsertTask this keepTaskOpen entity = do
120120
today <- utctDay <$> getCurrentTime -- TODO get local day
121121
let mode = taskMode today note
122122
mExisting <- Map.lookup noteId <$> readIORef this.taskItems
@@ -127,15 +127,20 @@ upsertTask this entity = do
127127
modifyIORef this.taskItems $ Map.insert noteId (mode, item)
128128
Just (oldMode, item) -> do
129129
updateTaskItem item entity
130+
wasSelected <- QTreeWidgetItem.isSelected item
130131
when (oldMode /= mode) do
131-
wasSelected <- QTreeWidgetItem.isSelected item
132132
oldModeItem <- (! oldMode) <$> readIORef this.modeItems
133133
idx <- QTreeWidgetItem.indexOfChild oldModeItem item
134134
_ <- QTreeWidgetItem.takeChild oldModeItem idx
135135
newModeItem <- getOrCreateModeItem this mode
136136
QTreeWidgetItem.addChild newModeItem item
137-
when wasSelected $ QTreeWidget.setCurrentItem this.parent item
138137
modifyIORef this.taskItems $ Map.insert noteId (mode, item)
138+
if keepTaskOpen then
139+
when wasSelected $ QTreeWidget.setCurrentItem this.parent item
140+
else
141+
QTreeWidget.setCurrentItem
142+
this.parent
143+
(nullptr :: QTreeWidgetItem)
139144
where
140145
Entity{entityId = DocId noteId, entityVal = NoteView{note}} = entity
141146

ff-qtah/FF/Qt/TaskWidget.hs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ import FF.Types (
4343
import FF.Qt.DateComponent (DateComponent)
4444
import FF.Qt.DateComponent qualified as DateComponent
4545

46+
type OnTaskUpdated =
47+
-- | Keep open task view (e.g. on postpone)
48+
Bool ->
49+
EntityView Note ->
50+
IO ()
51+
4652
data TaskWidget = TaskWidget
4753
{ parent :: QScrollArea
4854
, innerWidget :: QFrame
@@ -52,10 +58,10 @@ data TaskWidget = TaskWidget
5258
, start :: DateComponent
5359
, end :: DateComponent
5460
, noteId :: IORef (Maybe NoteId)
55-
, onTaskUpdated :: EntityView Note -> IO ()
61+
, onTaskUpdated :: OnTaskUpdated
5662
}
5763

58-
new :: Storage.Handle -> (EntityView Note -> IO ()) -> IO TaskWidget
64+
new :: Storage.Handle -> OnTaskUpdated -> IO TaskWidget
5965
new storage onTaskUpdated = do
6066
parent <- QScrollArea.new
6167

@@ -111,16 +117,16 @@ postponeSlot this _checked = do
111117
mNoteId <- readIORef this.noteId
112118
case mNoteId of
113119
Just noteId ->
114-
runStorage this.storage (cmdPostpone noteId) >>= update this
120+
runStorage this.storage (cmdPostpone noteId) >>= update False this
115121
Nothing -> pure ()
116122

117123
reload :: TaskWidget -> NoteId -> IO ()
118124
reload this noteId = do
119125
atomicWriteIORef this.noteId $ Just noteId
120-
runStorage this.storage (loadNote noteId) >>= update this
126+
runStorage this.storage (loadNote noteId) >>= update True this
121127

122-
update :: TaskWidget -> EntityDoc Note -> IO ()
123-
update this noteDoc = do
128+
update :: Bool -> TaskWidget -> EntityDoc Note -> IO ()
129+
update keepOpen this noteDoc = do
124130
entity <- runStorage this.storage $ viewNote noteDoc
125131
let Entity{entityVal} = entity
126132
let NoteView{note} = entityVal
@@ -129,7 +135,7 @@ update this noteDoc = do
129135
DateComponent.setDate this.start note_start
130136
DateComponent.setDate this.end note_end
131137
QWidget.adjustSize this.innerWidget
132-
this.onTaskUpdated entity
138+
this.onTaskUpdated keepOpen entity
133139

134140
makeSimpleSizePolicy :: QSizePolicyPolicy -> IO QSizePolicy
135141
makeSimpleSizePolicy policy =

0 commit comments

Comments
 (0)