User Tools

Site Tools


mac

Mac

Some news update on Mac: Trolltech is supporting the Cocoa API through Qt in the future. Read more on http://trolltech.com/company/newsroom/announcements/press.2008-03-03.5380825926

Creating custom menubars on Mac

KBasic's look and feel is equally on every platform, but there is one exception. The menubar designer is not present on Mac, because of the limitation of the menubar provided by Qt on Mac. On Mac the Qt menubar is actually a native Mac OS X menubar and is not created by Qt itself, therefore there is no feature of having two menubars at once on screen. But this feature is needed for KBasic's menubar designer and works well on Windows and Linux.

Therefore, if you would like to create a custom menubar, you have to write it in plain text, what your menubar should look alike. When you click on new menubar on Mac a plain text editor appears in which you may enter the needed information. Don't worry it is really easy to create such a file and it is worth it!

By the way, menubar files created with the menubar designer of KBasic on Windows and Linux works on Mac as well.

Structure of a menubar file of KBasic

The file's format looks like the following

  • Menubar properties
  • Menubar items + properties
  • Menubar code

Comments are not allowed, so do not use REM or '.

There are no properties for menubars yet, but you need to write two lines, which encloses the menubaritems.

Begin MenuBar *
 
  ' place your menubaritems here

End MenuBar

Write the following lines for every menu and change NAME to the right one.

Begin Menu NAME 
 
  ' place your properties here

End

Layout properties

ParentControl As String

Describes if this menubaritem is a main menubaritem on the bar (ParentControl = ””) or a child menubaritem, then ParentControl contains the name of the parent menubaritem.

  • ParentControl = “MenuBarItem0”
ParentIndex As Integer

Together with ParentControl, ParentIndex describes the position of this menubaritem in the list of the child menubaritems of ParentControl. ParentIndex starts with 0 then 1, 2, 3 and so on.

  • ParentIndex = 0

Example

DO NOT COPY THIS EXAMPLE, BECAUSE IT CONTAINS SOME COMMENTS, WHICH ARE NOT ALLOWED

 Begin Menu MenuBarItem0
    Caption = "Edit"
    Enabled = True
    ParentIndex = 0           ' THIS IS THE FIRST MENUBARITEM, because there is no ParentControl 
  End                         '(means ParentControl = ""), it is placed on the menubar on top.

  Begin Menu MenuBarItem1
    Caption = "File"
    Enabled = True
    ParentControl = "MenuBarItem0" ' THIS IS THE FIRST MENUBARITEM, of the menu of MenuBarItem0 declared above
    ParentIndex = 0                ' set to position 0
  End
Child menus

Working like normal menubaritems, but visually create a new menu, when the user enters this menubaritem.

Write ChildMenu instead of Menu as menubartype.

  Begin ChildMenu MenuBarItem4
    Caption = "Custom ChildMenu"
    Enabled = True
    ParentControl = "MenuBarItem1"
    ParentIndex = 1
  End

Write MenuItem instead of Menu as menubartype.

  Begin MenuItem MenuBarItem4
    Caption = "Custom menu entry"
    Enabled = True
    ParentControl = "MenuBarItem1"
    ParentIndex = 1
  End

Data properties

Caption As String
  • Caption = “Hello World!”
Icon As String
  • Icon = “my.png”
Key As String
  • Key = “CTRL+R”
Enabled As Boolean
  • Enabled = True
  • Enabled = False
Checked As Boolean (not supported yet)
  • Checked = True
  • Checked = False
Separator As Boolean
  • Separator = True
  • Separator = False
StatusTip As String
  • StatusTip = “Text to be displayed in statusbar, when mouse cursor is over this menubaritem.”
Tag As String
  • Tag = “Custom information, normally you do not need this.”

Add your code lines after the line:

End MenuBar

Adding event procedures is really simply. Just write a new sub with the name of the menuitem and “_OnEvent()”. Add your code inside and you are done.

Sub NAME_OnEvent()
  ' your code here 
End Sub

Sub MenuBarItem2_OnEvent()
  ' your code here 
End Sub

Add two more functions for the about box and help/contents dialog.

Sub About_OnEvent()
  ' your code here 
End Sub 

Sub Contents_OnEvent()
  ' your code here 
End Sub 

Example

Begin MenuBar *

  Begin Menu MenuBarItem0
    Caption = "Edit"
    Enabled = True
    ParentIndex = 1
  End

  Begin Menu MenuBarItem1
    Caption = "File"
    Enabled = True
    ParentIndex = 0
  End

  Begin MenuItem MenuBarItem2
    Caption = "CustomItem"
    Enabled = True
    ParentControl = "MenuBarItem0"
    ParentIndex = 0
  End

  Begin MenuItem MenuBarItem3
    Caption = "More"
    Enabled = True
    ParentControl = "MenuBarItem0"
    ParentIndex = 1
  End

  Begin ChildMenu MenuBarItem4
    Caption = "Custom ChildMenu"
    Enabled = True
    ParentControl = "MenuBarItem1"
    ParentIndex = 1
  End

  Begin MenuItem MenuBarItem5
    Caption = "Close"
    Enabled = True
    ParentControl = "MenuBarItem1"
    ParentIndex = 2
  End

  Begin MenuItem MenuBarItem10
    Caption = "Print"
    Enabled = True
    ParentControl = "MenuBarItem4"
    ParentIndex = 1
  End

  Begin MenuItem MenuBarItem11
    Caption = "Hide"
    Enabled = True
    ParentControl = "MenuBarItem4"
    ParentIndex = 2
  End

  Begin MenuItem MenuBarItem12
    Caption = "Open"
    Enabled = True
    ParentControl = "MenuBarItem1"
    ParentIndex = 0
  End

End MenuBar


Sub About_OnEvent()
  Print "you selected About"
End Sub 

Sub Contents_OnEvent()
  Print "you selected Contents"
End Sub 


Sub MenuBarItem2_OnEvent()
  Print "you selected CustomItem"
End Sub



Sub MenuBarItem3_OnEvent()
  Print "you selected More"
End Sub

Sub MenuBarItem12_OnEvent()
  Print "you selected Open"
End Sub 

Sub MenuBarItem5_OnEvent()
  Print "you selected Close"
End Sub 

Sub MenuBarItem10_OnEvent()
  Print "you selected Print"
End Sub 

Sub MenuBarItem11_OnEvent()
  Print "you selected Hide"
End Sub
mac.txt · Last modified: 2013/04/09 22:57 (external edit)