* not a "chef d'oeuvre" but revert and apply buttons should behave as

expected now
* removed some dead code


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24180 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexandre Deckner
2008-02-29 16:17:18 +00:00
parent dd8a8496f0
commit 793fb95c82
4 changed files with 78 additions and 19 deletions
+8
View File
@@ -154,6 +154,14 @@ Keymap::Save(entry_ref &ref)
}
bool Keymap::Equals(const Keymap& map) const
{
// not really efficient but this is the only way i found
// to reliably compare keymaps (used only for apply and revert)
return memcmp( &map.fKeys, &fKeys, sizeof(key_map)) == 0;
}
/* we need to know if a key is a modifier key to choose
a valid key when several are pressed together
*/
+2
View File
@@ -23,6 +23,8 @@ public:
bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey);
void GetChars(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes);
status_t Use();
bool Equals(const Keymap& map) const;
private:
char *fChars;
key_map fKeys;
+54 -9
View File
@@ -50,6 +50,8 @@ KeymapWindow::KeymapWindow()
: BWindow(BRect(80, 25, 692, 281), "Keymap", B_TITLED_WINDOW,
B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS )
{
fFirstTime = true;
// Add the menu bar
BMenuBar *menubar = AddMenuBar();
@@ -81,6 +83,7 @@ KeymapWindow::KeymapWindow()
fRevertButton = new BButton(BRect(442, 200, 515, 220), "revertButton",
"Revert", new BMessage(kMsgRevertKeymap));
placeholderView->AddChild(fRevertButton);
UpdateButtons();
BPath path;
find_directory(B_USER_SETTINGS_DIRECTORY, &path);
@@ -216,7 +219,6 @@ KeymapWindow::AddMaps(BView *placeholderView)
fUserListView->SetSelectionMessage(new BMessage(kMsgUserMapSelected));
FillSystemMaps();
FillUserMaps();
}
@@ -299,6 +301,7 @@ KeymapWindow::MessageReceived(BMessage* message)
// Deselect item in other BListView
fUserListView->DeselectAll();
UpdateButtons();
}
}
break;
@@ -308,17 +311,28 @@ KeymapWindow::MessageReceived(BMessage* message)
static_cast<KeymapListItem*>(fUserListView->ItemAt(fUserListView->CurrentSelection()));
if (keymapListItem) {
fCurrentMap.Load(keymapListItem->KeymapEntry());
if (fFirstTime) {
fPreviousMap.Load(keymapListItem->KeymapEntry());
fAppliedMap.Load(keymapListItem->KeymapEntry());
fFirstTime = false;
}
fMapView->Invalidate();
// Deselect item in other BListView
fSystemListView->DeselectAll();
UpdateButtons();
}
}
break;
case kMsgUseKeymap:
UseKeymap();
UpdateButtons();
break;
case kMsgRevertKeymap: // do nothing, just like the original
case kMsgRevertKeymap:
RevertKeymap();
UpdateButtons();
break;
default:
BWindow::MessageReceived(message);
@@ -327,6 +341,43 @@ KeymapWindow::MessageReceived(BMessage* message)
}
void
KeymapWindow::UpdateButtons()
{
fUseButton->SetEnabled(!fCurrentMap.Equals(fAppliedMap));
fRevertButton->SetEnabled(!fCurrentMap.Equals(fPreviousMap));
}
void
KeymapWindow::RevertKeymap()
{
//saves previous map to the Key_map file
printf("REVERT\n");
BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path)!=B_OK)
return;
path.Append("Key_map");
entry_ref ref;
get_ref_for_path(path.Path(), &ref);
status_t err;
if ((err = fPreviousMap.Save(ref)) != B_OK) {
printf("error when saving : %s", strerror(err));
return;
}
fPreviousMap.Use();
fAppliedMap.Load(ref);
//select and load it (first item in fUserListView is a ref to Key_map)
fUserListView->DeselectAll();
fUserListView->Select(0);
}
void
KeymapWindow::UseKeymap()
{
@@ -345,6 +396,7 @@ KeymapWindow::UseKeymap()
return;
}
fCurrentMap.Use();
fAppliedMap.Load(ref);
fUserListView->Select(0);
}
@@ -407,13 +459,6 @@ KeymapWindow::FillUserMaps()
}
BEntry*
KeymapWindow::CurrentMap()
{
return NULL;
}
MapView::MapView(BRect rect, const char *name, Keymap* keymap)
: BControl(rect, name, NULL, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW),
fCurrentFont(*be_plain_font),
+14 -10
View File
@@ -74,6 +74,16 @@ public:
void MessageReceived( BMessage* message );
protected:
BMenuBar *AddMenuBar();
void AddMaps(BView *placeholderView);
void UseKeymap();
void RevertKeymap();
void UpdateButtons();
void FillSystemMaps();
void FillUserMaps();
BListView *fSystemListView;
BListView *fUserListView;
// the map that's currently highlighted
@@ -82,18 +92,12 @@ protected:
BMenu *fFontMenu;
MapView *fMapView;
BMenuBar *AddMenuBar();
void AddMaps(BView *placeholderView);
void UseKeymap();
void FillSystemMaps();
void FillUserMaps();
BEntry* CurrentMap();
Keymap fCurrentMap;
Keymap fPreviousMap;
Keymap fAppliedMap;
bool fFirstTime;
BFilePanel *fOpenPanel; // the file panel to open
BFilePanel *fSavePanel; // the file panel to save
};