mirror of
https://gitlab.com/sheaf/metabrush.git
synced 2024-11-05 23:03:38 +00:00
file tab close buttons
This commit is contained in:
parent
267b91cee8
commit
9bc8e096c9
|
@ -120,5 +120,7 @@ executable MetaBrush
|
||||||
^>= 0.0.1
|
^>= 0.0.1
|
||||||
, gi-cairo-connector
|
, gi-cairo-connector
|
||||||
^>= 0.0.1
|
^>= 0.0.1
|
||||||
|
, haskell-gi-base
|
||||||
|
^>= 0.24
|
||||||
, text
|
, text
|
||||||
^>= 1.2.3.1 && < 1.2.5
|
^>= 1.2.3.1 && < 1.2.5
|
||||||
|
|
106
app/Main.hs
106
app/Main.hs
|
@ -1,4 +1,7 @@
|
||||||
{-# LANGUAGE BlockArguments #-}
|
{-# LANGUAGE BlockArguments #-}
|
||||||
|
{-# LANGUAGE ConstraintKinds #-}
|
||||||
|
{-# LANGUAGE GADTs #-}
|
||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-# LANGUAGE TypeApplications #-}
|
{-# LANGUAGE TypeApplications #-}
|
||||||
|
@ -8,6 +11,8 @@ module Main
|
||||||
where
|
where
|
||||||
|
|
||||||
-- base
|
-- base
|
||||||
|
import Control.Monad
|
||||||
|
( void )
|
||||||
import Data.Foldable
|
import Data.Foldable
|
||||||
( for_ )
|
( for_ )
|
||||||
import Data.Int
|
import Data.Int
|
||||||
|
@ -55,7 +60,7 @@ main = do
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
-- Initialise GTK
|
-- Initialise GTK
|
||||||
|
|
||||||
_ <- GTK.init Nothing
|
void $ GTK.init Nothing
|
||||||
Just screen <- GDK.screenGetDefault
|
Just screen <- GDK.screenGetDefault
|
||||||
|
|
||||||
themePath <- Text.pack <$> ( Directory.canonicalizePath =<< Cabal.getDataFileName "theme.css" )
|
themePath <- Text.pack <$> ( Directory.canonicalizePath =<< Cabal.getDataFileName "theme.css" )
|
||||||
|
@ -131,7 +136,7 @@ main = do
|
||||||
logoArea <- GTK.drawingAreaNew
|
logoArea <- GTK.drawingAreaNew
|
||||||
GTK.boxPackStart logo logoArea True True 0
|
GTK.boxPackStart logo logoArea True True 0
|
||||||
|
|
||||||
_ <- GTK.onWidgetDraw logoArea
|
void $ GTK.onWidgetDraw logoArea
|
||||||
$ Cairo.renderWithContext
|
$ Cairo.renderWithContext
|
||||||
( drawLogo logo_base logo_highlight logo_base )
|
( drawLogo logo_base logo_highlight logo_base )
|
||||||
|
|
||||||
|
@ -162,9 +167,6 @@ main = do
|
||||||
|
|
||||||
widgetAddClass fileBar "fileBar"
|
widgetAddClass fileBar "fileBar"
|
||||||
|
|
||||||
---------------------------------------------------------
|
|
||||||
-- Main viewport
|
|
||||||
|
|
||||||
fileTabs <- GTK.boxNew GTK.OrientationHorizontal 0
|
fileTabs <- GTK.boxNew GTK.OrientationHorizontal 0
|
||||||
GTK.containerAdd fileBar fileTabs
|
GTK.containerAdd fileBar fileTabs
|
||||||
widgetAddClasses fileTabs [ "fileBar", "plain", "text" ]
|
widgetAddClasses fileTabs [ "fileBar", "plain", "text" ]
|
||||||
|
@ -172,25 +174,60 @@ main = do
|
||||||
phantomRadioButton <- GTK.radioButtonNew ( [] @GTK.RadioButton )
|
phantomRadioButton <- GTK.radioButtonNew ( [] @GTK.RadioButton )
|
||||||
|
|
||||||
for_ [ 1 .. 12 ] \ i -> do
|
for_ [ 1 .. 12 ] \ i -> do
|
||||||
pgButton <- GTK.radioButtonNewWithLabelFromWidget ( Just phantomRadioButton ) ( "● New Document (" <> Text.pack ( show i ) <> ")" )
|
-- File tab elements.
|
||||||
|
pgButton <- GTK.radioButtonNewWithLabelFromWidget ( Just phantomRadioButton ) ( "New Document (" <> Text.pack ( show i ) <> ")" )
|
||||||
GTK.toggleButtonSetMode pgButton False -- don't display radio indicator
|
GTK.toggleButtonSetMode pgButton False -- don't display radio indicator
|
||||||
widgetAddClasses pgButton [ "fileBarTab" ]
|
closeFileButton <- GTK.buttonNewWithLabel "x"
|
||||||
GTK.boxPackStart fileTabs pgButton False False 0
|
|
||||||
|
-- Create box for file tab elements.
|
||||||
|
tab <- GTK.boxNew GTK.OrientationHorizontal 0
|
||||||
|
widgetAddClasses tab [ "fileBarTab" ]
|
||||||
|
GTK.boxPackStart fileTabs tab False False 0
|
||||||
|
GTK.boxPackStart tab pgButton True True 0
|
||||||
|
GTK.boxPackStart tab closeFileButton False False 0
|
||||||
|
|
||||||
|
widgetAddClasses pgButton [ "fileBarTabButton" ]
|
||||||
|
widgetAddClasses closeFileButton [ "fileBarCloseButton" ]
|
||||||
|
|
||||||
|
void $ GTK.onButtonClicked pgButton do
|
||||||
|
active <- GTK.toggleButtonGetActive pgButton
|
||||||
|
flags <- GTK.widgetGetStateFlags tab
|
||||||
|
if active
|
||||||
|
then GTK.widgetSetStateFlags tab ( GTK.StateFlagsActive : flags ) True
|
||||||
|
else GTK.widgetSetStateFlags tab ( filter ( /= GTK.StateFlagsActive ) flags ) True
|
||||||
|
|
||||||
|
{-
|
||||||
|
void $ GTK.onButtonClicked closeFileButton do
|
||||||
|
closeFileDialog ...
|
||||||
|
-}
|
||||||
|
|
||||||
|
for_ @_ @_ @_ @() [ Exists @GTK.IsWidget pgButton, Exists @GTK.IsWidget closeFileButton ] \ ( Exists button ) -> do
|
||||||
|
void $ GTK.onWidgetEnterNotifyEvent button \ _ -> do
|
||||||
|
flags <- GTK.widgetGetStateFlags tab
|
||||||
|
GTK.widgetSetStateFlags tab ( GTK.StateFlagsPrelight : flags ) True
|
||||||
|
pure False
|
||||||
|
void $ GTK.onWidgetLeaveNotifyEvent button \ _ -> do
|
||||||
|
flags <- GTK.widgetGetStateFlags tab
|
||||||
|
GTK.widgetSetStateFlags tab ( filter ( /= GTK.StateFlagsPrelight ) flags ) True
|
||||||
|
pure False
|
||||||
|
|
||||||
GTK.scrolledWindowSetPolicy fileBar GTK.PolicyTypeAutomatic GTK.PolicyTypeNever
|
GTK.scrolledWindowSetPolicy fileBar GTK.PolicyTypeAutomatic GTK.PolicyTypeNever
|
||||||
GTK.scrolledWindowSetOverlayScrolling fileBar True
|
GTK.scrolledWindowSetOverlayScrolling fileBar True
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- Main viewport
|
||||||
|
|
||||||
widgetAddClass viewportGrid "viewport_bg"
|
widgetAddClass viewportGrid "viewport_bg"
|
||||||
|
|
||||||
rvRulerCorner <- GTK.revealerNew
|
rvRulerCorner <- GTK.revealerNew
|
||||||
rvLeftRuler <- GTK.revealerNew
|
rvLeftRuler <- GTK.revealerNew
|
||||||
rvTopRuler <- GTK.revealerNew
|
rvTopRuler <- GTK.revealerNew
|
||||||
viewport <- GTK.drawingAreaNew
|
viewportOverlay <- GTK.overlayNew
|
||||||
|
|
||||||
GTK.gridAttach viewportGrid rvRulerCorner 0 0 1 1
|
GTK.gridAttach viewportGrid rvRulerCorner 0 0 1 1
|
||||||
GTK.gridAttach viewportGrid rvLeftRuler 0 1 1 1
|
GTK.gridAttach viewportGrid rvLeftRuler 0 1 1 1
|
||||||
GTK.gridAttach viewportGrid rvTopRuler 1 0 1 1
|
GTK.gridAttach viewportGrid rvTopRuler 1 0 1 1
|
||||||
GTK.gridAttach viewportGrid viewport 1 1 1 1
|
GTK.gridAttach viewportGrid viewportOverlay 1 1 1 1
|
||||||
|
|
||||||
rulerCorner <- GTK.boxNew GTK.OrientationVertical 0
|
rulerCorner <- GTK.boxNew GTK.OrientationVertical 0
|
||||||
leftRuler <- GTK.boxNew GTK.OrientationVertical 0
|
leftRuler <- GTK.boxNew GTK.OrientationVertical 0
|
||||||
|
@ -221,14 +258,31 @@ main = do
|
||||||
topRulerArea <- GTK.drawingAreaNew
|
topRulerArea <- GTK.drawingAreaNew
|
||||||
GTK.boxPackStart topRuler topRulerArea True True 0
|
GTK.boxPackStart topRuler topRulerArea True True 0
|
||||||
|
|
||||||
GTK.widgetSetHexpand rulerCorner False
|
GTK.widgetSetHexpand rulerCorner False
|
||||||
GTK.widgetSetVexpand rulerCorner False
|
GTK.widgetSetVexpand rulerCorner False
|
||||||
GTK.widgetSetHexpand leftRuler False
|
GTK.widgetSetHexpand leftRuler False
|
||||||
GTK.widgetSetVexpand leftRuler True
|
GTK.widgetSetVexpand leftRuler True
|
||||||
GTK.widgetSetHexpand topRuler True
|
GTK.widgetSetHexpand topRuler True
|
||||||
GTK.widgetSetVexpand topRuler False
|
GTK.widgetSetVexpand topRuler False
|
||||||
GTK.widgetSetHexpand viewport True
|
GTK.widgetSetHexpand viewportOverlay True
|
||||||
GTK.widgetSetVexpand viewport True
|
GTK.widgetSetVexpand viewportOverlay True
|
||||||
|
|
||||||
|
viewport <- GTK.drawingAreaNew
|
||||||
|
GTK.setContainerChild viewportOverlay viewport
|
||||||
|
|
||||||
|
viewportScrollbarGrid <- GTK.gridNew
|
||||||
|
GTK.overlayAddOverlay viewportOverlay viewportScrollbarGrid
|
||||||
|
|
||||||
|
viewportHScrollbar <- GTK.scrollbarNew GTK.OrientationHorizontal ( Nothing @GTK.Adjustment )
|
||||||
|
viewportVScrollbar <- GTK.scrollbarNew GTK.OrientationVertical ( Nothing @GTK.Adjustment )
|
||||||
|
GTK.widgetSetValign viewportHScrollbar GTK.AlignEnd
|
||||||
|
GTK.widgetSetHalign viewportVScrollbar GTK.AlignEnd
|
||||||
|
GTK.widgetSetVexpand viewportVScrollbar True
|
||||||
|
GTK.widgetSetHexpand viewportHScrollbar True
|
||||||
|
GTK.gridAttach viewportScrollbarGrid viewportHScrollbar 0 1 1 1
|
||||||
|
GTK.gridAttach viewportScrollbarGrid viewportVScrollbar 1 0 1 1
|
||||||
|
widgetAddClass viewportHScrollbar "viewportScrollbar"
|
||||||
|
widgetAddClass viewportVScrollbar "viewportScrollbar"
|
||||||
|
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
-- Panels
|
-- Panels
|
||||||
|
@ -255,3 +309,7 @@ main = do
|
||||||
GTK.main
|
GTK.main
|
||||||
|
|
||||||
exitSuccess
|
exitSuccess
|
||||||
|
|
||||||
|
|
||||||
|
data Exists c where
|
||||||
|
Exists :: c a => a -> Exists c
|
|
@ -16,6 +16,7 @@
|
||||||
background-color: rgb(236, 223, 210);
|
background-color: rgb(236, 223, 210);
|
||||||
min-width: 60px;
|
min-width: 60px;
|
||||||
min-height: 40px;
|
min-height: 40px;
|
||||||
|
-GtkWidget-window-dragging: false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Basic text colour */
|
/* Basic text colour */
|
||||||
|
@ -59,13 +60,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Viewport scrollbar colour */
|
/* Viewport scrollbar colour */
|
||||||
.viewport_scrollbar {
|
.viewportScrollbar {
|
||||||
color: rgba(40, 39, 39, 0.66);
|
color: purple; /* debugging */
|
||||||
|
background-color: rgba(45, 39, 39, 0.66);
|
||||||
|
margin: 4px;
|
||||||
|
min-width: 8px;
|
||||||
|
min-height: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tab scrollbar colour */
|
/* Tab scrollbar colour */
|
||||||
.tab_scrollbar {
|
.tabScrollbar {
|
||||||
color: rgba(48, 45, 38, 0.66);
|
background-color: rgba(48, 45, 38, 0.66);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Rulers */
|
/* Rulers */
|
||||||
|
@ -148,6 +153,10 @@
|
||||||
border-left: 2px solid rgb(41, 40, 40);
|
border-left: 2px solid rgb(41, 40, 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submenuItem:disabled {
|
||||||
|
color: rgb(149,149,149);
|
||||||
|
}
|
||||||
|
|
||||||
.submenuSeparator {
|
.submenuSeparator {
|
||||||
background-color: rgb(28,25,25);
|
background-color: rgb(28,25,25);
|
||||||
padding-top: 1px;
|
padding-top: 1px;
|
||||||
|
@ -176,8 +185,6 @@
|
||||||
|
|
||||||
.fileBarTab {
|
.fileBarTab {
|
||||||
border-top: 3px solid rgb(41, 40, 40);
|
border-top: 3px solid rgb(41, 40, 40);
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.fileBarTab:hover {
|
.fileBarTab:hover {
|
||||||
|
@ -189,6 +196,23 @@
|
||||||
background-color: rgb(72,70,61);
|
background-color: rgb(72,70,61);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fileBarTabButton {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 3px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fileBarCloseButton {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
margin: 0px;
|
||||||
|
color: rgba(212, 190, 152,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fileBarCloseButton:hover {
|
||||||
|
color: rgba(213,19,36,0.9);
|
||||||
|
}
|
||||||
|
|
||||||
/* Panels */
|
/* Panels */
|
||||||
.panels {
|
.panels {
|
||||||
min-width: 120px;
|
min-width: 120px;
|
||||||
|
@ -201,7 +225,3 @@
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
-GtkWidget-window-dragging: true;
|
-GtkWidget-window-dragging: true;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submenuItem:disabled {
|
|
||||||
color: rgb(149,149,149);
|
|
||||||
}
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ data EditMenu ( rt :: ResourceType )
|
||||||
, copy :: !( MenuItem NoSubresource rt )
|
, copy :: !( MenuItem NoSubresource rt )
|
||||||
, paste :: !( MenuItem NoSubresource rt )
|
, paste :: !( MenuItem NoSubresource rt )
|
||||||
, duplicate :: !( MenuItem NoSubresource rt )
|
, duplicate :: !( MenuItem NoSubresource rt )
|
||||||
|
, delete :: !( MenuItem NoSubresource rt )
|
||||||
, editSep2 :: !( Separator rt )
|
, editSep2 :: !( Separator rt )
|
||||||
, preferences :: !( MenuItem NoSubresource rt )
|
, preferences :: !( MenuItem NoSubresource rt )
|
||||||
}
|
}
|
||||||
|
@ -171,6 +172,7 @@ editMenuDescription
|
||||||
, copy = MenuItemDescription "Copy" [ "submenuItem" ] Nothing NoSubresource
|
, copy = MenuItemDescription "Copy" [ "submenuItem" ] Nothing NoSubresource
|
||||||
, paste = MenuItemDescription "Paste" [ "submenuItem" ] Nothing NoSubresource
|
, paste = MenuItemDescription "Paste" [ "submenuItem" ] Nothing NoSubresource
|
||||||
, duplicate = MenuItemDescription "Duplicate" [ "submenuItem" ] Nothing NoSubresource
|
, duplicate = MenuItemDescription "Duplicate" [ "submenuItem" ] Nothing NoSubresource
|
||||||
|
, delete = MenuItemDescription "Delete" [ "submenuItem" ] Nothing NoSubresource
|
||||||
, editSep2 = SeparatorDescription [ "submenuSeparator" ]
|
, editSep2 = SeparatorDescription [ "submenuSeparator" ]
|
||||||
, preferences = MenuItemDescription "Preferences" [ "submenuItem" ] Nothing NoSubresource
|
, preferences = MenuItemDescription "Preferences" [ "submenuItem" ] Nothing NoSubresource
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue