Added support for Keymap files
Display characters for each key in the selected font Pressed modifiers are taken into account git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8395 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,5 +5,6 @@ AddResources Keymap : Keymap.rdef ;
|
|||||||
Preference Keymap :
|
Preference Keymap :
|
||||||
KeymapApplication.cpp
|
KeymapApplication.cpp
|
||||||
KeymapWindow.cpp
|
KeymapWindow.cpp
|
||||||
KeymapListItem.cpp
|
KeymapListItem.cpp
|
||||||
|
Keymap.cpp
|
||||||
: be ;
|
: be ;
|
||||||
|
|||||||
@@ -0,0 +1,142 @@
|
|||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: Keymap.cpp
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
|
#include "Keymap.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ByteOrder.h>
|
||||||
|
#include <File.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_key( char *chars, int32 offset )
|
||||||
|
{
|
||||||
|
int size = chars[offset++];
|
||||||
|
|
||||||
|
switch( size ) {
|
||||||
|
case 0:
|
||||||
|
// Not mapped
|
||||||
|
printf( "N/A" );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
// 1-byte UTF-8/ASCII character
|
||||||
|
printf( "%c", chars[offset] );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// 2-, 3-, or 4-byte UTF-8 character
|
||||||
|
{
|
||||||
|
char *str = new char[size + 1];
|
||||||
|
strncpy( str, &(chars[offset]), size );
|
||||||
|
str[size] = 0;
|
||||||
|
printf( "%s", str );
|
||||||
|
delete [] str;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( "\t" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Keymap::GetChars(int32 keyCode, uint32 modifiers, char **chars)
|
||||||
|
{
|
||||||
|
int32 offset = 0;
|
||||||
|
switch (modifiers & 0xff) {
|
||||||
|
case 0: offset = fKeys.normal_map[keyCode]; break;
|
||||||
|
case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break;
|
||||||
|
case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break;
|
||||||
|
case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break;
|
||||||
|
case B_OPTION_KEY: offset = fKeys.option_map[keyCode]; break;
|
||||||
|
case B_OPTION_KEY|B_SHIFT_KEY: offset = fKeys.option_shift_map[keyCode]; break;
|
||||||
|
case B_OPTION_KEY|B_CAPS_LOCK: offset = fKeys.option_caps_map[keyCode]; break;
|
||||||
|
case B_OPTION_KEY|B_SHIFT_KEY|B_CAPS_LOCK: offset = fKeys.option_caps_shift_map[keyCode]; break;
|
||||||
|
case B_CONTROL_KEY: offset = fKeys.control_map[keyCode]; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int size = fChars[offset++];
|
||||||
|
|
||||||
|
switch( size ) {
|
||||||
|
case 0:
|
||||||
|
// Not mapped
|
||||||
|
*chars = NULL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// 1-, 2-, 3-, or 4-byte UTF-8 character
|
||||||
|
{
|
||||||
|
char *str = *chars = new char[size + 1];
|
||||||
|
strncpy(str, &(fChars[offset]), size );
|
||||||
|
str[size] = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Keymap::DumpKeymap()
|
||||||
|
{
|
||||||
|
// Print a chart of the normal, shift, option, and option+shift
|
||||||
|
// keys.
|
||||||
|
printf( "Key #\tNormal\tShift\tCaps\tC+S\tOption\tO+S\tO+C\tO+C+S\tControl\n" );
|
||||||
|
for( int idx = 0; idx < 128; idx++ ) {
|
||||||
|
printf( " 0x%x\t", idx );
|
||||||
|
print_key( fChars, fKeys.normal_map[idx] );
|
||||||
|
print_key( fChars, fKeys.shift_map[idx] );
|
||||||
|
print_key( fChars, fKeys.caps_map[idx] );
|
||||||
|
print_key( fChars, fKeys.caps_shift_map[idx] );
|
||||||
|
print_key( fChars, fKeys.option_map[idx] );
|
||||||
|
print_key( fChars, fKeys.option_shift_map[idx] );
|
||||||
|
print_key( fChars, fKeys.option_caps_map[idx] );
|
||||||
|
print_key( fChars, fKeys.option_caps_shift_map[idx] );
|
||||||
|
print_key( fChars, fKeys.control_map[idx] );
|
||||||
|
printf( "\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
Keymap::Load(entry_ref &ref)
|
||||||
|
{
|
||||||
|
status_t err;
|
||||||
|
|
||||||
|
BFile file(&ref, B_READ_ONLY);
|
||||||
|
if ((err = file.InitCheck()) != B_OK) {
|
||||||
|
printf("error %s\n", strerror(err));
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file.Read(&fKeys, sizeof(fKeys)) < (ssize_t)sizeof(fKeys)) {
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32 i=0; i<sizeof(fKeys)/4; i++)
|
||||||
|
((uint32*)&fKeys)[i] = B_BENDIAN_TO_HOST_INT32(((uint32*)&fKeys)[i]);
|
||||||
|
|
||||||
|
uint32 chars_size;
|
||||||
|
if (file.Read(&chars_size, sizeof(uint32)) < (ssize_t)sizeof(uint32)) {
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
chars_size = B_BENDIAN_TO_HOST_INT32(chars_size);
|
||||||
|
if (!fChars)
|
||||||
|
delete[] fChars;
|
||||||
|
fChars = new char[chars_size];
|
||||||
|
file.Read(fChars, chars_size);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: Keymap.h
|
||||||
|
// Author: Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
|
#ifndef KEYMAP_H
|
||||||
|
#define KEYMAP_H
|
||||||
|
|
||||||
|
#include <InterfaceDefs.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
|
||||||
|
class Keymap
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
status_t Load(entry_ref &ref);
|
||||||
|
void DumpKeymap();
|
||||||
|
void GetChars(int32 keyCode, uint32 modifiers, char **chars);
|
||||||
|
private:
|
||||||
|
char *fChars;
|
||||||
|
key_map fKeys;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //KEYMAP_H
|
||||||
@@ -1,7 +1,24 @@
|
|||||||
#include <add-ons/input_server/InputServerDevice.h>
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
#include <storage/File.h>
|
//
|
||||||
#include <app/Application.h>
|
// Copyright (c) 2004, Haiku
|
||||||
#include <storage/Directory.h>
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: KeymapApplication.cpp
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
|
#include <InputServerDevice.h>
|
||||||
|
#include <File.h>
|
||||||
|
#include <Application.h>
|
||||||
|
#include <Directory.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <Path.h>
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#include <interface/Input.h>
|
#include <interface/Input.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -27,67 +44,11 @@ void KeymapApplication::MessageReceived( BMessage * message )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns a BList containing BEntry objects
|
|
||||||
* representing the systems' keymap files
|
|
||||||
*/
|
|
||||||
BList* KeymapApplication::SystemMaps()
|
|
||||||
{
|
|
||||||
// TODO: find a constant containing this path and use that instead
|
|
||||||
return EntryList( "/boot/beos/etc/Keymap" );
|
|
||||||
}
|
|
||||||
|
|
||||||
BList* KeymapApplication::UserMaps()
|
|
||||||
{
|
|
||||||
// TODO: find a constant containing this path and use that instead
|
|
||||||
return EntryList( "/boot/home/config/settings/Keymap" );
|
|
||||||
}
|
|
||||||
|
|
||||||
BList* KeymapApplication::EntryList( char *directoryPath )
|
|
||||||
{
|
|
||||||
BList *entryList;
|
|
||||||
BDirectory *directory;
|
|
||||||
BEntry *currentEntry;
|
|
||||||
|
|
||||||
|
|
||||||
entryList = new BList();
|
|
||||||
directory = new BDirectory();
|
|
||||||
|
|
||||||
if( directory->SetTo( directoryPath ) == B_OK )
|
/*bool
|
||||||
// put each files' name in the list
|
KeymapApplication::UseKeymap( BEntry *keymap )
|
||||||
while( true ) {
|
|
||||||
currentEntry = new BEntry();
|
|
||||||
if( directory->GetNextEntry( currentEntry, true ) != B_OK ) {
|
|
||||||
delete currentEntry;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
entryList->AddItem( currentEntry );
|
|
||||||
#if DEBUG
|
|
||||||
char name[B_FILE_NAME_LENGTH];
|
|
||||||
currentEntry->GetName( name );
|
|
||||||
printf("Found: %s\n",name);
|
|
||||||
#endif //DEBUG
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// something went wrong; no system keymaps today
|
|
||||||
// TODO: catch error codes and act appropriately
|
|
||||||
|
|
||||||
}
|
|
||||||
delete directory;
|
|
||||||
|
|
||||||
return entryList;
|
|
||||||
}
|
|
||||||
|
|
||||||
BEntry* KeymapApplication::CurrentMap()
|
|
||||||
{
|
|
||||||
BEntry *entry;
|
|
||||||
|
|
||||||
// TODO: find a constant containing this path and use that instead
|
|
||||||
entry = new BEntry( "/boot/home/config/settings/Key_map" );
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool KeymapApplication::UseKeymap( BEntry *keymap )
|
|
||||||
{ // Copies keymap to ~/config/settings/key_map
|
{ // Copies keymap to ~/config/settings/key_map
|
||||||
BFile *inFile;
|
BFile *inFile;
|
||||||
BFile *outFile;
|
BFile *outFile;
|
||||||
@@ -132,14 +93,18 @@ bool KeymapApplication::UseKeymap( BEntry *keymap )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KeymapApplication::IsValidKeymap( BFile *inFile )
|
|
||||||
|
bool
|
||||||
|
KeymapApplication::IsValidKeymap( BFile *inFile )
|
||||||
{
|
{
|
||||||
// TODO: implement this thing
|
// TODO: implement this thing
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int KeymapApplication::Copy( BFile *original, BFile *copy )
|
|
||||||
|
int
|
||||||
|
KeymapApplication::Copy( BFile *original, BFile *copy )
|
||||||
{
|
{
|
||||||
char *buffer[ COPY_BUFFER_SIZE ];
|
char *buffer[ COPY_BUFFER_SIZE ];
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
@@ -169,9 +134,11 @@ int KeymapApplication::Copy( BFile *original, BFile *copy )
|
|||||||
}
|
}
|
||||||
|
|
||||||
return errorCode;
|
return errorCode;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
int KeymapApplication::NotifyInputServer()
|
|
||||||
|
int
|
||||||
|
KeymapApplication::NotifyInputServer()
|
||||||
{
|
{
|
||||||
// This took me days to find out. Go figure.
|
// This took me days to find out. Go figure.
|
||||||
// Be didn't need to restart the thing - they prolly used
|
// Be didn't need to restart the thing - they prolly used
|
||||||
@@ -182,10 +149,11 @@ int KeymapApplication::NotifyInputServer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main ()
|
int
|
||||||
|
main ()
|
||||||
{
|
{
|
||||||
new KeymapApplication;
|
new KeymapApplication;
|
||||||
be_app->Run();
|
be_app->Run();
|
||||||
delete be_app;
|
delete be_app;
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,24 @@
|
|||||||
#ifndef OBOS_KEYMAP_APPLICATION_H
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
#define OBOS_KEYMAP_APPLICATION_H
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: KeymapApplication.h
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
|
#ifndef KEYMAP_APPLICATION_H
|
||||||
|
#define KEYMAP_APPLICATION_H
|
||||||
|
|
||||||
#include <storage/Entry.h>
|
#include <storage/Entry.h>
|
||||||
#include <support/List.h>
|
|
||||||
|
|
||||||
#define APP_SIGNATURE "application/x-vnd.OpenBeOS-Keymap"
|
#define APP_SIGNATURE "application/x-vnd.OpenBeOS-Keymap"
|
||||||
#define COPY_BUFFER_SIZE 1 * 1024
|
|
||||||
|
|
||||||
|
|
||||||
class KeymapWindow;
|
class KeymapWindow;
|
||||||
|
|
||||||
@@ -14,19 +26,15 @@ class KeymapApplication : public BApplication {
|
|||||||
public:
|
public:
|
||||||
KeymapApplication();
|
KeymapApplication();
|
||||||
void MessageReceived(BMessage *message);
|
void MessageReceived(BMessage *message);
|
||||||
BList* SystemMaps();
|
|
||||||
BList* UserMaps();
|
|
||||||
BEntry* CurrentMap();
|
|
||||||
bool UseKeymap( BEntry *keymap );
|
bool UseKeymap( BEntry *keymap );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
KeymapWindow *fWindow;
|
KeymapWindow *fWindow;
|
||||||
|
|
||||||
BList* EntryList( char *directoryPath );
|
|
||||||
bool IsValidKeymap( BFile *inFile );
|
bool IsValidKeymap( BFile *inFile );
|
||||||
int Copy( BFile *original, BFile *copy );
|
|
||||||
int NotifyInputServer();
|
int NotifyInputServer();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OBOS_KEYMAP_APPLICATION_H
|
#endif // KEYMAP_APPLICATION_H
|
||||||
|
|||||||
@@ -1,3 +1,18 @@
|
|||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: KeymapListItem.cpp
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A BStringItem modified such that it holds
|
* A BStringItem modified such that it holds
|
||||||
* the BEntry object it corresponds with
|
* the BEntry object it corresponds with
|
||||||
@@ -6,23 +21,8 @@
|
|||||||
#include "KeymapListItem.h"
|
#include "KeymapListItem.h"
|
||||||
|
|
||||||
|
|
||||||
KeymapListItem::KeymapListItem( BEntry *keymap )
|
KeymapListItem::KeymapListItem( entry_ref &keymap, const char* name )
|
||||||
: BStringItem( "" )
|
: BStringItem( name ? name : keymap.name ),
|
||||||
|
fKeymap(keymap)
|
||||||
{
|
{
|
||||||
char name[B_FILE_NAME_LENGTH];
|
|
||||||
|
|
||||||
fKeymap = keymap;
|
|
||||||
keymap->GetName( name );
|
|
||||||
|
|
||||||
SetText( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
KeymapListItem::~KeymapListItem()
|
|
||||||
{
|
|
||||||
delete fKeymap;
|
|
||||||
}
|
|
||||||
|
|
||||||
BEntry* KeymapListItem::KeymapEntry()
|
|
||||||
{
|
|
||||||
return fKeymap;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,36 @@
|
|||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: KeymapListItem.h
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A BStringItem modified such that it holds
|
* A BStringItem modified such that it holds
|
||||||
* the BEntry object it corresponds with
|
* the BEntry object it corresponds with
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef OBOS_KEYMAP_LIST_ITEM_H
|
#ifndef KEYMAP_LIST_ITEM_H
|
||||||
#define OBOS_KEYMAP_LIST_ITEM_H
|
#define KEYMAP_LIST_ITEM_H
|
||||||
|
|
||||||
#include <interface/ListItem.h>
|
|
||||||
#include <storage/Entry.h>
|
|
||||||
|
|
||||||
|
#include <ListItem.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
|
||||||
class KeymapListItem : public BStringItem {
|
class KeymapListItem : public BStringItem {
|
||||||
public:
|
public:
|
||||||
KeymapListItem( BEntry *keymap );
|
KeymapListItem( entry_ref &keymap, const char* name = NULL);
|
||||||
~KeymapListItem();
|
entry_ref & KeymapEntry() { return fKeymap; };
|
||||||
BEntry *KeymapEntry();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BEntry *fKeymap;
|
entry_ref fKeymap;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //OBOS_KEYMAP_LIST_ITEM_H
|
#endif //KEYMAP_LIST_ITEM_H
|
||||||
|
|||||||
+715
-538
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,27 @@
|
|||||||
#ifndef OBOS_KEYMAP_WINDOW_H
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
#define OBOS_KEYMAP_WINDOW_H
|
//
|
||||||
|
// Copyright (c) 2004, Haiku
|
||||||
|
//
|
||||||
|
// This software is part of the Haiku distribution and is covered
|
||||||
|
// by the Haiku license.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File: KeymapWindow.h
|
||||||
|
// Author: Sandor Vroemisse, Jérôme Duval
|
||||||
|
// Description: Keymap Preferences
|
||||||
|
// Created : July 12, 2004
|
||||||
|
//
|
||||||
|
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
|
#ifndef KEYMAP_WINDOW_H
|
||||||
|
#define KEYMAP_WINDOW_H
|
||||||
|
|
||||||
#include <interface/Window.h>
|
#include <interface/Window.h>
|
||||||
#include <support/List.h>
|
#include <support/List.h>
|
||||||
#include <interface/MenuBar.h>
|
#include <interface/MenuBar.h>
|
||||||
|
#include "Keymap.h"
|
||||||
|
|
||||||
#if !DEBUG
|
#define WINDOW_TITLE "Keymap"
|
||||||
#define WINDOW_TITLE "Keymap"
|
|
||||||
#else
|
|
||||||
#define WINDOW_TITLE "OBOS Keymap"
|
|
||||||
#endif //DEBUG
|
|
||||||
#define WINDOW_LEFT_TOP_POSITION BPoint( 80, 25 )
|
#define WINDOW_LEFT_TOP_POSITION BPoint( 80, 25 )
|
||||||
#define WINDOW_DIMENSIONS BRect( 0,0, 612,256 )
|
#define WINDOW_DIMENSIONS BRect( 0,0, 612,256 )
|
||||||
|
|
||||||
@@ -19,17 +31,24 @@ class KeymapApplication;
|
|||||||
class MapView : public BView
|
class MapView : public BView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MapView(BRect rect, const char *name);
|
MapView(BRect rect, const char *name, Keymap *keymap);
|
||||||
void Draw(BRect rect);
|
void Draw(BRect rect);
|
||||||
void DrawKey(BRect rect, bool pressed, bool vertical = false);
|
void DrawKey(int32 keyCode);
|
||||||
void DrawBorder(BRect borderRect);
|
void DrawBorder(BRect borderRect);
|
||||||
//void Pulse();
|
|
||||||
void AttachedToWindow();
|
void AttachedToWindow();
|
||||||
void KeyDown(const char* bytes, int32 numBytes);
|
void KeyDown(const char* bytes, int32 numBytes);
|
||||||
void KeyUp(const char* bytes, int32 numBytes);
|
void KeyUp(const char* bytes, int32 numBytes);
|
||||||
void MessageReceived(BMessage *msg);
|
void MessageReceived(BMessage *msg);
|
||||||
|
void SetFontFamily(const font_family family) {fCurrentFont.SetFamilyAndStyle(family, NULL); };
|
||||||
|
private:
|
||||||
key_info fOldKeyInfo;
|
key_info fOldKeyInfo;
|
||||||
|
BRect fKeysRect[128];
|
||||||
|
bool fKeysVertical[128];
|
||||||
|
uint8 fKeyState[16];
|
||||||
|
BFont fCurrentFont;
|
||||||
|
|
||||||
|
Keymap *fCurrentMap;
|
||||||
|
BTextView *fTextView;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -38,31 +57,28 @@ public:
|
|||||||
KeymapWindow( BRect frame );
|
KeymapWindow( BRect frame );
|
||||||
bool QuitRequested();
|
bool QuitRequested();
|
||||||
void MessageReceived( BMessage* message );
|
void MessageReceived( BMessage* message );
|
||||||
//void AllAttached();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
KeymapApplication *fApplication;
|
|
||||||
BView *fPlaceholderView;
|
|
||||||
BListView *fSystemListView;
|
BListView *fSystemListView;
|
||||||
BListView *fUserListView;
|
BListView *fUserListView;
|
||||||
// the map that's currently highlighted
|
// the map that's currently highlighted
|
||||||
BEntry *fSelectedMap;
|
|
||||||
BButton *fUseButton;
|
BButton *fUseButton;
|
||||||
BButton *fRevertButton;
|
BButton *fRevertButton;
|
||||||
const char *title;
|
BMenu *fFontMenu;
|
||||||
|
|
||||||
MapView *fMapView;
|
MapView *fMapView;
|
||||||
|
|
||||||
BMenuBar *AddMenuBar();
|
BMenuBar *AddMenuBar();
|
||||||
void AddMaps();
|
void AddMaps(BView *placeholderView);
|
||||||
BList *ListItemsFromEntryList( BList * entryList);
|
//KeymapListItem* ItemFromEntry( BEntry *entry );
|
||||||
KeymapListItem* ItemFromEntry( BEntry *entry );
|
void UseKeymap();
|
||||||
void HandleSystemMapSelected( BMessage* );
|
|
||||||
void HandleUserMapSelected( BMessage* );
|
void FillSystemMaps();
|
||||||
void HandleMapSelected( BMessage *selectionMessage,
|
void FillUserMaps();
|
||||||
BListView * selectedView, BListView * otherView );
|
|
||||||
void UseKeymap();
|
BEntry* CurrentMap();
|
||||||
|
|
||||||
|
Keymap fCurrentMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OBOS_KEYMAP_WINDOW_H
|
#endif // KEYMAP_WINDOW_H
|
||||||
|
|||||||
Reference in New Issue
Block a user