tabloid-0.3: TableView.hs
module TableView where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.ModelView as MV
import qualified Data.ByteString.Lazy.Char8 as L
data ViewState = V
{
mainWidget :: Widget
, treeView :: MV.TreeView
, maxLines :: SpinButton
, searchE :: Entry
, searchPB :: Button
, searchNB :: Button
, groupB :: ToggleButton
, groupE :: SpinButton
}
new treeM loadSaveW = do
vbox <- vBoxNew False 2
hbox <- hBoxNew False 2
l <- labelNew (Just "Max. Lines: ")
sl <- labelNew (Just "Search in Table: ")
searchE <- entryNew
searchNB <- buttonNewFromStock stockGoDown
searchPB <- buttonNewFromStock stockGoUp
maxLines <- spinButtonNewWithRange 1 50000 1
spinButtonSetValue maxLines 5000.0
groupL <- labelNew (Just "Column: ")
groupE <- spinButtonNewWithRange 0 50000 1
spinButtonSetWrap groupE True
spinButtonSetSnapToTicks groupE True
spinButtonSetValue groupE 0
groupB <- toggleButtonNewWithLabel "Group"
v1 <- vSeparatorNew
v2 <- vSeparatorNew
v3 <- vSeparatorNew
boxPackStart hbox loadSaveW PackNatural 2
boxPackStart hbox v1 PackNatural 2
boxPackStart hbox sl PackNatural 2
boxPackStart hbox searchE PackNatural 2
boxPackStart hbox searchPB PackNatural 2
boxPackStart hbox searchNB PackNatural 2
boxPackStart hbox v2 PackNatural 2
boxPackStart hbox groupL PackNatural 2
boxPackStart hbox groupE PackNatural 2
boxPackStart hbox groupB PackNatural 2
boxPackStart hbox v3 PackNatural 2
boxPackEnd hbox maxLines PackNatural 2
boxPackEnd hbox l PackNatural 2
treeV <- MV.treeViewNewWithModel treeM
scrollWin <- scrolledWindowNew Nothing Nothing
containerAdd scrollWin treeV
boxPackStart vbox scrollWin PackGrow 2
boxPackStart vbox hbox PackNatural 2
set treeV [ MV.treeViewHeadersClickable := True
, MV.treeViewHeadersVisible := True
-- , MV.treeViewEnableGridLines := MV.TreeViewGridLinesHorizontal
, MV.treeViewReorderable := True
, MV.treeViewRulesHint := True
, MV.treeViewEnableSearch := True
-- , MV.treeViewRubberBanding := True
]
return $ V (toWidget vbox) treeV maxLines searchE searchPB searchNB groupB groupE
add_col treeV listM row_sel title scolid = do
strCol <- MV.treeViewColumnNew
strColRenderer <- MV.cellRendererTextNew
set strColRenderer [ MV.cellTextEditable := True ]
MV.treeViewColumnPackStart strCol strColRenderer True
MV.treeViewColumnSetSortColumnId strCol scolid
MV.cellLayoutPackStart strCol strColRenderer True
MV.treeViewColumnSetResizable strCol True
MV.cellLayoutSetAttributes strCol strColRenderer listM $ \row ->
[MV.cellText := (row_sel row) ]
MV.treeViewColumnSetTitle strCol title
MV.treeViewAppendColumn treeV strCol
return ()