wxHaskell メニュー

ホーム   目次

この章ではメニューとステータスバーとツールバーの紹介をします。


簡単なメニュー

macOSで、wxHaskellのメニューを正常に動作させるには、「はじめに」で紹介したように、アプリケーションをバンドルにしなければなりません。もしバンドルにしない場合は、アプリケーションの起動直後は、メニューが反応しません。アプリケーションを一度非アクティブにして、再度アクティブすると、メニューが反応するようになります。なお、Windowsでは、特に何もしなくても正常に動作します。

simplemenu.hs


module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "簡単なメニュー", clientSize := sz 250 150]
    m       <- menuPane [text := "ファイル"]
    quit    <- menuQuit m [on command := close f]
    set f [menuBar := [m]]
    return ()
    
win
mac

macでは、アプリケーションをバンドルにするか、アプリケーションを一度非アクティブにして、再度アクティブしてからしか、メニューが反応しません。

サブメニュー

submenu.hs


main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "サブメニュー", clientSize := sz 250 150]
    m       <- menuPane [text := "ファイル"]
    sub     <- menuPane [text := "読み込み"]
    ms1     <- menuItem sub [text := "ニュースフィードの読み込み..."]
    ms2     <- menuItem sub [text := "ブックマークの読み込み..."]
    ms3     <- menuItem sub [text := "メールの読み込み..."]
    menuSub m sub []
    separa  <- menuLine m
    quit    <- menuQuit m [on command := close f]
    set f [menuBar := [m]]
    return ()
    
win
mac

macでは、アプリケーションをバンドルにするか、アプリケーションを一度非アクティブにして、再度アクティブしてからしか、メニューが反応しません。

チェックメニューアイテム

checkmenu.hs


module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "チェックメニューアイテム"]
    m       <- menuPane [text := "表示"]
    check   <- menuItem m [text := "チェック", checkable := True]
    p       <- panel f []
    t       <- staticText p [text := "..."]
    set check [on command ::= menuChecked t]
    set f [menuBar := [m], layout := margin 15 $ container p $
        floatLeft (widget t), clientSize := sz 250 150]
    return ()
    where
        menuChecked t check = do
            bool <- get check checked
            if bool
            then set t [text := "チェックされました。"]
            else set t [text := "..."]
    
win
mac

macでは、アプリケーションをバンドルにするか、アプリケーションを一度非アクティブにして、再度アクティブしてからしか、メニューが反応しません。

ポップアップメニュー

popupmenu.hs


module Main where

import Graphics.UI.WX

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "PopupMenu", clientSize := sz 250 150]
    m       <- menuPane     []
    about   <- menuAbout m  [on command := infoDialog f "About PopupMenu"
                            "PopupMenu version 1.0\n© appdesign.jp"]
    quit    <- menuQuit m   [on command := close f]
    
    set f [on clickRight := pop m f]
    return ()
    where
        pop m f pt = do
            menuPopup m pt f
    
win
mac
lin

ショートカットキー

メニュー項目にショートカットキーを設定するには、メニュー項目の text 属性に「Ctrl+キー」と書き加えるだけです。

「Ctrl+キー」と記述していても、macOSでは、実際のアプリケーションでは、自動的に「⌘キー」に変わります。

shortcutkey.hs


module Main where

import Graphics.UI.WX

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "ショートカットキー"]
    m       <- menuPane [text := "ファイル"]
    about   <- menuAbout m [on command := infoDialog f
                            "ショートカットキーについて"
                            "ショートカットキー\nバージョン 1.0\n© appdesign.jp"]
    sep1    <- menuLine m
    new     <- menuItem m  [text := "新規\tCtrl+N", on command := infoDialog f
                            "お知らせ"
                            "「新規」メニューが選ばれました"]
    open    <- menuItem m  [text := "開く\tCtrl+O", on command := infoDialog f
                            "お知らせ"
                            "「開く」メニューが選ばれました"]
    save    <- menuItem m  [text := "保存\tCtrl+S", on command := infoDialog f
                            "お知らせ"
                            "「保存」メニューが選ばれました"]
    sep2     <- menuLine m
    quit    <- menuQuit m [on command := close f]
    
    set f   [menuBar := [m], clientSize := sz 250 150]
    
    return ()
    
win
mac
lin

ステータスバー

statusbar.hs


module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "ステータスバー"]
    p       <- panel f []
    menu    <- menuPane [text := "ファイル"]
    about   <- menuAbout menu [help := "About..."]
    clear   <- menuItem menu [text := "消去", help := "消去メニュー"]
    separa  <- menuLine menu
    q       <- menuQuit menu [help := "終了メニュー"]
    stat    <- statusField []
    b1      <- button p [text := "おはよう", on command ::= buttonClicked stat]
    b2      <- button p [text := "おやすみ", on command ::= buttonClicked stat]
    set clear [on command := clearStat stat]
    set f   [menuBar := [menu], statusBar := [stat],
            layout := margin 5 $ container p $ row 5
                [hfill (widget b1), hfill (widget b2)],
          clientSize := sz 250 150
            ]
    return ()
    where
        buttonClicked stat b = do
            str <- get b text
            set stat [text := str]
            return ()
        clearStat stat = do
            set stat [text := ""]
    
win
mac

ツールバー

サンプルで使用する画像はここからダウンロードできます。解凍した img フォルダをコードファイルと同じディレクトリに置いてください。

toolbar.hs


module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start gui

gui :: IO ()
gui = do
    f       <- frame [text := "ツールバー"]
    p       <- panel f []
    menu    <- menuPane [text := "ファイル"]
    about   <- menuAbout menu [help := "About..."]
    separa  <- menuLine menu
    q       <- menuQuit menu [help := "終了メニュー"]
    tbar    <- toolBar f []
    toolMenu tbar q "" "img/exit.png" [on command := close f]
    stat    <- statusField []
    set f   [menuBar := [menu], statusBar := [stat],
            clientSize := sz 250 150
            ]
    return ()
    
mac
mint


20669 visits
Posted: Jan. 05, 2019
Update: Jan. 10, 2019

ホーム   目次   ページトップ