[haiku-commits] r43093 - in haiku/trunk: build/jam data/system/data/KeyboardLayouts data/system/data/KeyboardLayouts/Apple Aluminum src/preferences/keymap

  • From: jscipione@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 2 Nov 2011 05:30:45 +0100 (CET)

Author: jscipione
Date: 2011-11-02 05:30:44 +0100 (Wed, 02 Nov 2011)
New Revision: 43093
Changeset: https://dev.haiku-os.org/changeset/43093
Ticket: https://dev.haiku-os.org/ticket/7964

Added:
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
Extended International
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
International
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
(US)
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
Extended (US)
Removed:
   haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminium
Modified:
   haiku/trunk/build/jam/HaikuImage
   haiku/trunk/src/preferences/keymap/KeymapWindow.cpp
   haiku/trunk/src/preferences/keymap/KeymapWindow.h
Log:
Add 3 new Apple Aluminum keyboard layout files and update and rename the
existing 'Apple Aluminium' keyboard layout to 'Apple Aluminium Extended
International.' The 3 new layout files are US mini and extended version
as well as an international mini version. This completes #7964

International corresponds to keyboard layouts for all locales except the US
and Japan. I have Japanese Apple Aluminum keyboard layout files almost
ready but I first need to determine what the special kana and eisu keys
are mapped to.

The Apple Aluminum keyboard layout files are tucked away in an Apple Aluminum
subdirectory. The Keymap preference app has been modified to turn
subdirectories into submenus of the Layout menu.

HaikuImage has been modified to include each keyboard layout file in the 
image individually as recommended by Ingo.

Modified: haiku/trunk/build/jam/HaikuImage
===================================================================
--- haiku/trunk/build/jam/HaikuImage    2011-11-02 03:39:20 UTC (rev 43092)
+++ haiku/trunk/build/jam/HaikuImage    2011-11-02 04:30:44 UTC (rev 43093)
@@ -499,11 +499,37 @@
 AddSymlinkToHaikuImage system data Keymaps : Slovene : Croatian ;
 AddSymlinkToHaikuImage system data Keymaps : US-International : Brazilian ;
 
+# Copy keyboard layout files to the image one-by-one.
 local keyboardLayoutsDir
        = [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts ] ;
-local keyboardLayouts = [ Glob $(keyboardLayoutsDir) : [^.]* ] ;
-AddFilesToHaikuImage system data KeyboardLayouts : $(keyboardLayouts) ;
+local keyboardLayoutFiles =
+       "Generic 104-key"
+       "Generic 105-key International"
+       "IBM Laptop International"
+       "Kinesis Advantage"
+       "Kinesis Ergo Elan International"
+       "TypeMatrix 2030" ;
+keyboardLayoutFiles = $(keyboardLayoutFiles:G=keyboard-layout) ;
+SEARCH on $(keyboardLayoutFiles) = $(keyboardLayoutsDir) ;
+AddFilesToHaikuImage system data KeyboardLayouts
+       : $(keyboardLayoutFiles) ;
 
+# Add Apple Aluminum keyboard layout files to the image in an Apple Aluminum
+# subdirectory. The subdirectory is turned into a submenu in the Layout menu
+# of the Keymap preference app.
+local appleAluminumDir
+       = [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts
+               Apple\ Aluminum ] ;
+local appleAluminumFiles =
+       "Apple Aluminium Extended International"
+       "Apple Aluminium International"
+       "Apple Aluminum (US)"
+       "Apple Aluminum Extended (US)" ;
+appleAluminumFiles = $(appleAluminumFiles:G=keyboard-layout) ;
+SEARCH on $(appleAluminumFiles) = $(appleAluminumDir) ;
+AddFilesToHaikuImage system data KeyboardLayouts Apple\ Aluminum
+       : $(appleAluminumFiles) ;
+
 local driverSettingsFiles = <driver-settings>kernel ;
 SEARCH on $(driverSettingsFiles)
        = [ FDirName $(HAIKU_TOP) data settings kernel drivers ] ;

Added: haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple 
Aluminium Extended International
===================================================================
--- haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
Extended International                          (rev 0)
+++ haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
Extended International  2011-11-02 04:30:44 UTC (rev 43093)
@@ -0,0 +1,26 @@
+name = Apple Aluminium Extended International
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$lshift = 13,10
+$ctrl = 14,10
+$alt = 12,10
+$cmd = 14,10
+$b = 5,10
+$d = 15,10
+$e = l12,20,8
+$f = 10,20
+$two = 20,10
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; 15.5,6:-; 10,6:0x70068; 10,6:+2; 5,6:-; 
10,6:+4; ]
+[ 0,6; 4,5:-; :0x11+12; d$back:+; $b:-; :-; d:0x20; d:+1; $b:-; d:+1; d:0x6a; 
d:0x23+1 ]
+[ 0,16; 4,5:-; d$d:0x26; :+12; d$e:0x47; $b:-; d:0x34-0x36; $b:-; :+3; d:0x25 ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+       d17,10:0x3b; :+11; :0x33; 50,10:-; :0x48-0x4a; d:0x3a ]
+[ 0,36; 4,5:-; d$lshift:0x4b; :0x69; :0x4c+9; d24,10:+1; 15,10:-; d:+1; 
+       15,10:-; :+3; d$f:+1 ]
+[ 0,46; 4,5:-; d$ctrl:0x5c; d$alt:0x5d; d$cmd:0x66; 67,10:0x5e; d$cmd:0x67;
+       d$alt:0x5f; d$ctrl:0x60; $b:-; d:+3; $b:-; $two:+1; :+1 ]

Added: haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple 
Aluminium International
===================================================================
--- haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
International                           (rev 0)
+++ haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium 
International   2011-11-02 04:30:44 UTC (rev 43093)
@@ -0,0 +1,27 @@
+name = Apple Aluminium International
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$lshift = 13,10
+$b = 2,12
+$d = 15,10
+$e = l12,20,8
+$f = 10,20
+$two = 20,10
+$last = 10,12
+$cmd = 14,12
+$arrow = 10,6
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; ]
+[ 0,16; 4,5:-; d$d:0x26; :+12; d$e:0x47; ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+       d17,10:0x3b; :+11; :0x33; ]
+[ 0,36; 4,5:-; d$lshift:0x4b; :0x69; :0x4c+9; d24,10:+1; ]
+[ 0,46; 4,5:-; d$last:-; # fn key
+       d$last:0x5c; d$last:0x5d; d$cmd:0x66; 49,12:0x5e; d$cmd:0x67;
+       d$last:0x5f; $arrow:-; d$arrow:0x57; $arrow:-; ]
+[ 121,52; d$arrow:0x61+2; ]

Added: haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple 
Aluminum (US)
===================================================================
--- haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
(US)                             (rev 0)
+++ haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
(US)     2011-11-02 04:30:44 UTC (rev 43093)
@@ -0,0 +1,24 @@
+name = Apple Aluminum (US)
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$b = 2,12
+$f = 10,20
+$two = 20,10
+$last = 10,12
+$cmd = 14,12
+$arrow = 10,6
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; ]
+[ 0,16; 4,5:-; d17,10:0x26; :+13; ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+       d19,10:0x3b; :+11; d18,10:0x47; ]
+[ 0,36; 4,5:-; d24,10:0x4b; :+10; d23,10:+1; ]
+[ 0,46; 4,5:-; d$last:-; # fn key
+       d$last:0x5c; d$last:0x5d; d$cmd:0x66; 49,12:0x5e; d$cmd:0x67;
+       d$last:0x5f; $arrow:-; d$arrow:0x57; $arrow:-; ]
+[ 121,52; d$arrow:0x61+2; ]

Added: haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple 
Aluminum Extended (US)
===================================================================
--- haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
Extended (US)                            (rev 0)
+++ haiku/trunk/data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum 
Extended (US)    2011-11-02 04:30:44 UTC (rev 43093)
@@ -0,0 +1,23 @@
+name = Apple Aluminum Extended (US)
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$shift = 24,10
+$ctrl = 14,10
+$alt = 12,10
+$cmd = 14,10
+$b = 5,10
+$f = 10,20
+$two = 20,10
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; 15.5,6:-; 10,6:0x70068; 10,6:+2; 5,6:-; 
10,6:+4; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; $b:-; :-; d:0x20; d:+1; $b:-; d:+1; d:0x6a; 
d:0x23+1 ]
+[ 0,16; 4,5:-; 0,16; 4,5:-; d17,10:0x26; :+13; $b:-; d:0x34-0x36; $b:-; :+3; 
d:0x25 ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+       d19,10:0x3b; :+11; d18,10:0x47; 40,10:-; :0x48-0x4a; d:0x3a ]
+[ 0,36; 4,5:-; d24,10:0x4b; :+10; d23,10:+1; 15,10:-; d:+1; 15,10:-; :+3; 
d$f:+1 ]
+[ 0,46; 4,5:-; d$ctrl:0x5c; d$alt:0x5d; d$cmd:0x66; 67,10:0x5e; d$cmd:0x67;
+       d$alt:0x5f; d$ctrl:0x60; $b:-; d:+3; $b:-; $two:+1; :+1 ]

Modified: haiku/trunk/src/preferences/keymap/KeymapWindow.cpp
===================================================================
--- haiku/trunk/src/preferences/keymap/KeymapWindow.cpp 2011-11-02 03:39:20 UTC 
(rev 43092)
+++ haiku/trunk/src/preferences/keymap/KeymapWindow.cpp 2011-11-02 04:30:44 UTC 
(rev 43093)
@@ -375,7 +375,6 @@
 KeymapWindow::_CreateMenu()
 {
        BMenuBar* menuBar = new BMenuBar(Bounds(), "menubar");
-       BMenuItem* item;
 
        // Create the File menu
        BMenu* menu = new BMenu(B_TRANSLATE("File"));
@@ -391,12 +390,6 @@
 
        // Create keyboard layout menu
        fLayoutMenu = new BMenu(B_TRANSLATE("Layout"));
-       fLayoutMenu->SetRadioMode(true);
-       fLayoutMenu->AddItem(item = new BMenuItem(
-               fKeyboardLayoutView->GetKeyboardLayout()->Name(),
-               new BMessage(kChangeKeyboardLayout)));
-       item->SetMarked(true);
-
        _AddKeyboardLayouts(fLayoutMenu);
        menuBar->AddItem(fLayoutMenu);
 
@@ -531,49 +524,60 @@
                path.Append("KeyboardLayouts");
 
                BDirectory directory;
-               if (directory.SetTo(path.Path()) == B_OK) {
-                       entry_ref ref;
-                       while (directory.GetNextRef(&ref) == B_OK) {
-                               if (menu->FindItem(ref.name) != NULL)
-                                       continue;
+               if (directory.SetTo(path.Path()) == B_OK)
+                       _AddKeyboardLayoutMenu(menu, directory);
+       }
+}
 
-                               BMessage* message = new 
BMessage(kChangeKeyboardLayout);
-                               message->AddRef("ref", &ref);
 
-                               menu->AddItem(new BMenuItem(ref.name, message));
-                       }
+/*!    Adds a menu populated with the keyboard layouts found in the passed
+       in directory to the passed in menu. Each subdirectory in the passed
+       in directory is added as a submenu recursively.
+*/
+void
+KeymapWindow::_AddKeyboardLayoutMenu(BMenu* menu, BDirectory directory)
+{
+       entry_ref ref;
+
+       while (directory.GetNextRef(&ref) == B_OK) {
+               if (menu->FindItem(ref.name) != NULL)
+                       continue;
+
+               BDirectory subdirectory;
+               subdirectory.SetTo(&ref);
+               if (subdirectory.InitCheck() == B_OK) {
+                       BMenu* submenu = new BMenu(ref.name);
+
+                       _AddKeyboardLayoutMenu(submenu, subdirectory);
+                       menu->AddItem(submenu);
+               } else {
+                       BMessage* message = new BMessage(kChangeKeyboardLayout);
+
+                       message->AddRef("ref", &ref);
+                       menu->AddItem(new BMenuItem(ref.name, message));
                }
        }
 }
 
 
+/*!    Sets the keyboard layout with the passed in path and marks the
+       corresponding menu item. If the path is not found in the menu this 
method
+       sets the default keyboard layout and marks the corresponding menu item.
+*/
 status_t
 KeymapWindow::_SetKeyboardLayout(const char* path)
 {
-       status_t status = B_OK;
+       status_t status = fKeyboardLayoutView->GetKeyboardLayout()->Load(path);
 
-       if (path != NULL && path[0] != '\0') {
-               status = fKeyboardLayoutView->GetKeyboardLayout()->Load(path);
-               if (status == B_OK) {
-                       // select item
-                       for (int32 i = fLayoutMenu->CountItems(); i-- > 0;) {
-                               BMenuItem* item = fLayoutMenu->ItemAt(i);
-                               BMessage* message = item->Message();
-                               entry_ref ref;
-                               if (message->FindRef("ref", &ref) == B_OK) {
-                                       BPath layoutPath(&ref);
-                                       if (layoutPath == path) {
-                                               item->SetMarked(true);
-                                               break;
-                                       }
-                               }
-                       }
-               }
-       }
+       // mark a menu item (unmarking all others)
+       _MarkKeyboardLayoutItem(path, fLayoutMenu);
 
-       if (path == NULL || status != B_OK) {
+       if (path == NULL || path[0] == '\0' || status != B_OK) {
                fKeyboardLayoutView->GetKeyboardLayout()->SetDefault();
-               fLayoutMenu->ItemAt(0)->SetMarked(true);
+               BMenuItem* item = fLayoutMenu->FindItem(
+                       fKeyboardLayoutView->GetKeyboardLayout()->Name());
+               if (item != NULL)
+                       item->SetMarked(true);
        }
 
        // Refresh currently set layout
@@ -584,6 +588,42 @@
 }
 
 
+/*!    Marks a keyboard layout item by iterating through the menus recursively
+       searching for the menu item with the passed in path. This method always
+       iterates through all menu items and unmarks them. If no item with the
+       passed in path is found it is up to the caller to set the default 
keyboard
+       layout and mark item corresponding to the default keyboard layout path.
+*/
+void
+KeymapWindow::_MarkKeyboardLayoutItem(const char* path, BMenu* menu)
+{
+       BMenuItem* item = NULL;
+       entry_ref ref;
+
+       for (int32 i = 0; i < menu->CountItems(); i++) {
+               item = menu->ItemAt(i);
+               if (item == NULL)
+                       continue;
+
+               // Unmark each item initially
+               item->SetMarked(false);
+
+               BMenu* submenu = item->Submenu();
+               if (submenu != NULL)
+                       _MarkKeyboardLayoutItem(path, submenu);
+               else {
+                       if (item->Message()->FindRef("ref", &ref) == B_OK) {
+                               BPath layoutPath(&ref);
+                               if (path != NULL && path[0] != '\0' && 
layoutPath == path) {
+                                       // Found it, mark the item
+                                       item->SetMarked(true);
+                               }
+                       }
+               }
+       }
+}
+
+
 /*!    Sets the label of the "Switch Shorcuts" button to make it more
        descriptive what will happen when you press that button.
 */
@@ -922,7 +962,7 @@
 
 
 status_t
-KeymapWindow::_SaveSettings() const
+KeymapWindow::_SaveSettings()
 {
        BFile file;
        status_t status
@@ -933,13 +973,41 @@
        BMessage settings('keym');
        settings.AddRect("window frame", Frame());
 
-       BMenuItem* item = fLayoutMenu->FindMarked();
+       BPath path = _GetMarkedKeyboardLayoutPath(fLayoutMenu);
+       if (path.InitCheck() == B_OK)
+               settings.AddString("keyboard layout", path.Path());
+
+       return settings.Flatten(&file);
+}
+
+
+/*!    Gets the path of the currently marked keyboard layout item
+       by searching through each of the menus recursively until
+       a marked item is found.
+*/
+BPath
+KeymapWindow::_GetMarkedKeyboardLayoutPath(BMenu* menu)
+{
+       BPath path;
+       BMenuItem* item = NULL;
        entry_ref ref;
-       if (item != NULL && item->Message()->FindRef("ref", &ref) == B_OK) {
-               BPath path(&ref);
-               if (path.InitCheck() == B_OK)
-                       settings.AddString("keyboard layout", path.Path());
+
+       for (int32 i = 0; i < menu->CountItems(); i++) {
+               item = menu->ItemAt(i);
+               if (item == NULL)
+                       continue;
+
+               BMenu* submenu = item->Submenu();
+               if (submenu != NULL)
+                       return _GetMarkedKeyboardLayoutPath(submenu);
+               else {
+                       if (item->IsMarked()
+                           && item->Message()->FindRef("ref", &ref) == B_OK) {
+                               path.SetTo(&ref);
+                       return path;
+                       }
+               }
        }
 
-       return settings.Flatten(&file);
+       return path;
 }

Modified: haiku/trunk/src/preferences/keymap/KeymapWindow.h
===================================================================
--- haiku/trunk/src/preferences/keymap/KeymapWindow.h   2011-11-02 03:39:20 UTC 
(rev 43092)
+++ haiku/trunk/src/preferences/keymap/KeymapWindow.h   2011-11-02 04:30:44 UTC 
(rev 43093)
@@ -40,7 +40,11 @@
                        BMenuBar*                       _CreateMenu();
                        BView*                          _CreateMapLists();
                        void                            
_AddKeyboardLayouts(BMenu* menu);
+                       void                            
_AddKeyboardLayoutMenu(BMenu* menu,
+                                                                       
BDirectory directory);
                        status_t                        
_SetKeyboardLayout(const char* path);
+                       void                            
_MarkKeyboardLayoutItem(const char* path,
+                                                                       BMenu* 
menu);
 
                        void                            
_UpdateSwitchShortcutButton();
                        void                            _UpdateButtons();
@@ -64,7 +68,8 @@
                        status_t                        _GetSettings(BFile& 
file, int mode) const;
                        status_t                        _LoadSettings(BRect& 
frame,
                                                                        
BString& keyboardLayout);
-                       status_t                        _SaveSettings() const;
+                       status_t                        _SaveSettings();
+                       BPath                           
_GetMarkedKeyboardLayoutPath(BMenu* menu);
 
 private:
                        BListView*                      fSystemListView;


Other related posts:

  • » [haiku-commits] r43093 - in haiku/trunk: build/jam data/system/data/KeyboardLayouts data/system/data/KeyboardLayouts/Apple Aluminum src/preferences/keymap - jscipione