Merge branch 'Sankore-1.40' of github.com:Sankore/Sankore-3.1 into Sankore-1.40

preferencesAboutTextFull
Claudio Valerio 13 years ago
commit 7c2a22a5d0
  1. BIN
      resources/images/virtual.keyboard/29/capslock.png
  2. BIN
      resources/images/virtual.keyboard/29/shift.png
  3. BIN
      resources/images/virtual.keyboard/41/capslock.png
  4. BIN
      resources/images/virtual.keyboard/41/shift.png
  5. 420
      resources/library/interactivities/Selectionner.wgt/css/basic.css
  6. BIN
      resources/library/interactivities/Selectionner.wgt/img/add_block.png
  7. BIN
      resources/library/interactivities/Selectionner.wgt/img/circle.png
  8. BIN
      resources/library/interactivities/Selectionner.wgt/img/close_cont.png
  9. BIN
      resources/library/interactivities/Selectionner.wgt/img/green_point.png
  10. BIN
      resources/library/interactivities/Selectionner.wgt/img/play.png
  11. BIN
      resources/library/interactivities/Selectionner.wgt/img/red_point.png
  12. BIN
      resources/library/interactivities/Selectionner.wgt/img/replay.png
  13. BIN
      resources/library/interactivities/Selectionner.wgt/img/stop.png
  14. 457
      resources/library/interactivities/Selectionner.wgt/js/script.js
  15. 457
      resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js
  16. 457
      resources/library/interactivities/Selectionner.wgt/locales/ru/js/script.js
  17. 2
      resources/sankore.qrc
  18. 1
      src/frameworks/UBPlatformUtils.cpp
  19. 96
      src/frameworks/UBPlatformUtils.h
  20. 541
      src/frameworks/UBPlatformUtils_linux.cpp
  21. 29
      src/frameworks/UBPlatformUtils_mac.mm
  22. 527
      src/frameworks/UBPlatformUtils_win.cpp
  23. 117
      src/gui/UBKeyboardPalette.cpp
  24. 33
      src/gui/UBKeyboardPalette.h
  25. 166
      src/gui/UBKeyboardPalette_linux.cpp
  26. 38
      src/gui/UBKeyboardPalette_mac.cpp
  27. 19
      src/gui/UBKeyboardPalette_win.cpp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

@ -1,420 +0,0 @@
html, body{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border-radius: 50px;
}
body{
background-image: url(../img/bg.png);
}
.toggle_mode{
width: 100%;
height: 25px;
border-bottom: 1px solid black;
background-color: #ccc;
position: fixed;
top: 0;
left: 0;
z-index: 2;
}
#display_img, #edit_img{
width: 15px;
height: 15px;
margin: 5px 10px;
}
.green_point{
background-image: url(../img/green_point.png);
}
.red_point{
background-image: url(../img/red_point.png);
}
#display_text, #edit_text{
height: 19px;
padding: 3px 0 0 0;
}
.selected{
}
#display:hover, #edit:hover{
background-color: #999;
}
.cont{
width: 100%;
border-bottom: 1px solid black;
margin: 0;
padding: 0;
position: relative;
}
.sub_cont{
width: 100%;
padding: 0;
margin: 20px 0 0 0;
min-height: 60px;
}
.imgs_cont{
width: 100%;
margin: 0;
}
.number_cont{
width: 40px;
height: 33px;
margin-left: 40px;
margin-right: 10px;
background-image: url(../img/circle.png);
background-repeat: no-repeat;
text-align: center;
float: left;
font-size: 130%;
padding-top: 7px;
font-weight: bold;
}
.text_cont{
width: 80%;
min-height: 40px;
float: right;
background-color: #ccc;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
padding-left: 10px;
}
.close_cont{
width: 20px;
height: 20px;
background-image: url(../img/close_cont.png);
cursor: pointer;
position: absolute;
top: -15px;
left: 5px;
}
.add_img{
width: 120px;
height: 120px;
margin: 10px 20px;
background-image: url(../img/add_text.png);
background-position: center;
background-repeat: no-repeat;
cursor: pointer;
float: left;
display: inline-block;
}
.img_block{
display: inline-block;
}
.img_block, .text_block{
width: 120px;
height: 120px;
margin: 10px 20px;
cursor: pointer;
float: left;
position: relative;
border: 1px solid #ccc;
-moz-box-shadow: #ccc -1px 0 4px;
-webkit-box-shadow: #ccc -1px 0 4px;
box-shadow: #ccc -1px 0 4px;
background-color: white;
}
.text_block{
display: table;
text-align: center;
}
.audio_block{
width: 120px;
height: 30px;
margin: 44px 5px;
position: relative;
float: left;
display: inline-block;
}
.text_subblock{
display: table-cell;
vertical-align: middle;
font-size: 120%;
}
.close_img, .clear_img, .numb_img {
width: 30px;
height: 30px;
background-repeat: no-repeat;
position: absolute;
right: -15px;
cursor: pointer;
}
.close_img{
background-image: url(../img/close_img.png);
top: -15px;
}
.clear_img{
background-image: url(../img/clear_img.png);
top: 15px;
}
.numb_img{
background-image: url(../img/numb_img.png);
left: -15px;
top: -15px;
color: white;
font-weight: bold;
font-size: 130%;
}
.add_block{
margin: 20px 0 0 20px;
width: 110px;
height: 25px;
background-image: url(../img/add_block.png);
background-repeat: no-repeat;
padding-left: 40px;
padding-top: 5px;
cursor: pointer;
background-color: #ccc;
-webkit-border-radius: 15px;
border-radius: 15px;
}
.ch_box{
margin: 0;
padding: 0;
position: absolute;
bottom: 0;
right: 0;
}
.right{
background-color: #9f9;
}
.clear{
clear: both;
}
.over{
background-color: #ccc;
}
.play, .stop{
height: 30px;
width: 70px;
float: left;
cursor: pointer;
}
.play{
background-image: url(../img/play.png);
}
.stop{
background-image: url(../img/stop.png);
}
.replay{
height: 30px;
width: 32px;
margin-left: 10px;
float: left;
background-image: url(../img/replay.png);
background-repeat: no-repeat;
cursor: pointer;
}
/*new design*/
.body_table{
width: 100%;
height: 100%;
border-spacing: 0;
}
/*top*/
.b_top_left{
width: 54px;
background-image: url(../img/top_left.png);
background-repeat: no-repeat;
}
.b_top_right{
width: 54px;
background-image: url(../img/top_right.png);
background-repeat: no-repeat;
}
.b_top_center{
height: 54px;
background-image: url(../img/top.png);
background-repeat: repeat-x;
}
/*bottom*/
.b_bottom_left{
width: 54px;
background-image: url(../img/bottom_left.png);
background-repeat: no-repeat;
}
.b_bottom_right{
width: 54px;
background-image: url(../img/bottom_right.png);
background-repeat: no-repeat;
}
.b_bottom_center{
background-image: url(../img/bottom.png);
background-repeat: repeat-x;
}
/*center*/
.b_center_left{
width: 54px;
background-image: url(../img/left.png);
background-repeat: repeat-y;
}
.b_center_right{
width: 54px;
background-image: url(../img/right.png);
background-repeat: repeat-y;
}
#data{
width: 100%;
height: 100%;
min-height: 250px;
overflow: auto;
}
#wgt_name{
height: 44px;
width: 200px;
margin: 10px 10px 0 10px;
padding: 0;
float: left;
/*font-family: "Lobster13Regular";*/
font-size: 24px;
color: #8c5730;
}
#wgt_reload, #wgt_edit, #wgt_display{
cursor: pointer;
width: 80px;
height: 44px;
margin: 10px 10px 0 0;
float: right;
/*font-family: "Lobster13Regular";*/
font-size: 24px;
color: #8c5730;
}
#wgt_display{
width: 100px;
padding-left: 40px;
background-image: url(../img/slate-edit.png);
background-repeat: no-repeat;
background-position: top 0;
display: none;
}
#wgt_edit{
width: 100px;
padding-left: 40px;
background-image: url(../img/slate-edit.png);
background-repeat: no-repeat;
background-position: top 0;
}
#wgt_reload{
padding-left: 40px;
background-image: url(../img/slate-toolbar-reload.png);
background-repeat: no-repeat;
background-position: top 0;
}
.style_select{
width: 120px;
/*font-family: "Lobster13Regular";*/
font-size: 24px;
float: right;
margin: 10px 20px 0 0;
border-radius: 10px;
background-image: url(../img/ar_down.png);
background-color: #d4aa79;
color: #8c5730;
background-position: 105px 11px;
background-repeat: no-repeat;
-webkit-appearance: menulist-text;
display: none;
}
.btl_pad{
background-image: url(../img/pad-top-left.png) !important;
}
.btc_pad{
background-image: url(../img/pad-top.png) !important;
}
.btr_pad{
background-image: url(../img/pad-top-right.png) !important;
}
.bcl_pad{
background-image: url(../img/pad-left.png) !important;
}
.bcr_pad{
background-image: url(../img/pad-right.png) !important;
}
.bbl_pad{
background-image: url(../img/pad-bottom-left.png) !important;
}
.bbc_pad{
background-image: url(../img/pad-bottom.png) !important;
}
.bbr_pad{
background-image: url(../img/pad-bottom-right.png) !important;
}
.pad_color{
color: white !important;
}
.pad_reload{
background-image: url(../img/slate-toolbar-reload-white.png) !important;
}
.pad_edit{
background-image: url(../img/slate-display.png) !important;
}
.pad_select{
background-color: black !important;
color: white !important;
background-image: url(../img/ar_down_white.png) !important;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -1,457 +0,0 @@
var sankoreLang = {
display: "Display",
edit: "Edit",
short_desc: "Select animals from the following list:",
add: "Add new block",
enter: "Enter your instruction here ...",
cat: "cat",
ball: "ball",
shovel: "shovel",
dog: "dog",
tree: "tree",
wgt_name: "Select the desired",
reload: "Reload",
slate: "Wood",
pad: "Pad"
};
//main function
function start(){
$("#wgt_display").text(sankoreLang.display);
$("#wgt_edit").text(sankoreLang.edit);
$("#wgt_name").text(sankoreLang.wgt_name);
$("#wgt_reload").text(sankoreLang.reload);
$(".style_select option[value='1']").text(sankoreLang.slate);
$(".style_select option[value='2']").text(sankoreLang.pad);
if(window.sankore){
if(sankore.preference("selectionner","")){
var data = jQuery.parseJSON(sankore.preference("selectionner",""));
importData(data);
} else
showExample();
if(sankore.preference("sel_style","")){
changeStyle(sankore.preference("sel_style",""));
$(".style_select").val(sankore.preference("sel_style",""));
} else
changeStyle(1)
}
else
showExample();
//events
if (window.widget) {
window.widget.onleave = function(){
exportData();
sankore.setPreference("sel_style", $(".style_select").find("option:selected").val());
}
}
$("#wgt_reload").click(function(){
window.location.reload();
});
$(".style_select").change(function (event){
changeStyle($(this).find("option:selected").val());
})
$("#wgt_display, #wgt_edit").click(function(event){
if(this.id == "wgt_display"){
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(false);
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$(".style_select").css("display","none");
$(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
container.find(".close_cont").remove();
container.find(".imgs_cont").removeAttr("ondragenter")
.removeAttr("ondragleave")
.removeAttr("ondragover")
.removeAttr("ondrop");
container.find(".img_block, .text_block").each(function(){
$(this).find(".close_img").remove();
$(this).find(".text_subblock").removeAttr("contenteditable");
$(this).find("input:checkbox").removeAttr("checked")
});
});
$(this).css("display", "none");
$("#wgt_edit").css("display", "block");
}
} else {
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$(".style_select").css("display","block");
$(".cont").each(function(){
var container = $(this);
$("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
container.find(".imgs_cont").removeClass("right")
.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
var add_img = $("<div class='add_img'>");
container.find(".img_block, .text_block").each(function(){
$("<div class='close_img'>").appendTo($(this));
if($(this).find("input:hidden").val() == 0)
$(this).find("input:checkbox").attr('checked', false);
else
$(this).find("input:checkbox").attr('checked', true);
$(this).find(".text_subblock").attr("contenteditable","true");
});
add_img.insertBefore(container.find(".clear"));
});
$("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
}
});
//add new block
$(".add_block").live("click", function(){
addContainer();
});
//checkbox events
$("input:checkbox").live("click", function(){
if($("#wgt_display").hasClass("selected")){
var flag = true;
var block = $(this).parent().parent();
block.find(".text_block, .img_block, .audio_block").each(function(){
if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
flag = false;
else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
flag = false;
});
if(flag)
block.addClass("right");
else
block.removeClass("right");
} else {
if($(this).is(":checked"))
$(this).parent().find("input:hidden").val(1);
else
$(this).parent().find("input:hidden").val(0);
}
});
//play/pause event
$(".play, .stop").live("click", function(){
var tmp_audio = $(this);
var audio = tmp_audio.parent().find("audio").get(0);
if($(this).hasClass("play")){
if(tmp_audio.parent().find("source").attr("src")){
tmp_audio.removeClass("play").addClass("stop");
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.play();
}
} else {
$(this).removeClass("stop").addClass("play");
clearInterval( tmp_audio.parent().find("input").val())
audio.pause();
}
});
$(".replay").live("click", function(){
var tmp_audio = $(this).prev();
var audio = $(this).parent().find("audio").get(0);
if(tmp_audio.parent().find("source").attr("src")){
$(this).prev().removeClass("play").addClass("stop");
clearInterval($(this).parent().find("input").val());
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.currentTime = 0;
audio.play();
}
});
//adding new img
$(".add_img").live("click", function(){
addTextBlock($(this));
});
//deleting a block
$(".close_cont").live("click",function(){
$(this).parent().remove();
refreshBlockNumbers();
});
//deleting the img block
$(".close_img").live("click", function(){
$(this).parent().remove();
});
}
//export
function exportData(){
var array_to_export = [];
$(".cont").each(function(){
var cont_obj = new Object();
cont_obj.text = $(this).find(".text_cont").text();
cont_obj.blocks = [];
$(this).find(".img_block, .audio_block, .text_block").each(function(){
var tmp_block = new Object();
if($(this).hasClass("img_block")){
if($(this).find(".audio_block").size() == 0){
tmp_block.src = $(this).find("img").attr("src");
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.h = $(this).find("img").height();
tmp_block.w = $(this).find("img").width();
tmp_block.type = "img";
}
}
if($(this).hasClass("audio_block")){
tmp_block.src = $(this).find("source").attr("src");
tmp_block.hidden = $(this).parent().find("input:hidden").val();
tmp_block.type = "audio";
}
if($(this).hasClass("text_block")){
tmp_block.text = $(this).find(".text_subblock").text();
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.type = "text";
}
cont_obj.blocks.push(tmp_block);
});
array_to_export.push(cont_obj);
});
sankore.setPreference("selectionner", JSON.stringify(array_to_export));
}
//import
function importData(data){
var tmp = 0;
for(var i in data){
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='clear'>").appendTo(imgs_container);
$("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
$("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].blocks){
switch(data[i].blocks[j].type){
case "text":
var text_block = $("<div class='text_block'>").insertBefore(imgs_container.find(".clear"));
$("<div class='text_subblock'>" + data[i].blocks[j].text + "</div>").appendTo(text_block);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(text_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(text_block);
break;
case "img":
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore(imgs_container.find(".clear"));
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
$("<img src=\"" + data[i].blocks[j].src + "\" width='" + data[i].blocks[j].w + "' height='" + data[i].blocks[j].h + "' style=\"display: inline;\"/>").appendTo(img_block);
break;
case "audio":
var img_tmp = $("<div class='img_block'>").insertBefore(imgs_container.find(".clear"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp);
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", data[i].blocks[j].src);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
break;
}
}
}
}
//example
function showExample(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.cat + "</div>").appendTo(tmp1);
$("<input type='hidden' value='1'/>").appendTo(tmp1);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp1)
var tmp2 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.ball + "</div>").appendTo(tmp2);
$("<input type='hidden' value='0'/>").appendTo(tmp2);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp2)
var tmp3 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.shovel + "</div>").appendTo(tmp3);
$("<input type='hidden' value='0'/>").appendTo(tmp3);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp3)
var tmp4 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.dog + "</div>").appendTo(tmp4);
$("<input type='hidden' value='1'/>").appendTo(tmp4);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp4)
var tmp5 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.tree + "</div>").appendTo(tmp5);
$("<input type='hidden' value='0'/>").appendTo(tmp5);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp5)
$("<div class='clear'>").appendTo(imgs_container);
container.appendTo("#data")
}
//add new container
function addContainer(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
imgs_container.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
$("<div class='close_cont'>").appendTo(container);
$("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
$("<div class='add_img'>").appendTo(imgs_container);
$("<div class='clear'>").appendTo(imgs_container);
container.insertBefore($(".add_block"));
}
//add new img block
function addTextBlock(dest){
var tmp = $("<div class='text_block'>").insertBefore(dest)
$("<div class='text_subblock' contenteditable='true'>" + sankoreLang.enter + "</div>").appendTo(tmp);
$("<input type='hidden' value='0'/>").appendTo(tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp);
$("<div class='close_img'>").appendTo(tmp);
}
function refreshBlockNumbers(){
var i = 0;
$(".cont").each(function(){
$(this).find(".number_cont").text(++i);
})
}
function stringToXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
//changing the style
function changeStyle(val){
if(val == 1){
$(".b_top_left").removeClass("btl_pad");
$(".b_top_center").removeClass("btc_pad");
$(".b_top_right").removeClass("btr_pad");
$(".b_center_left").removeClass("bcl_pad");
$(".b_center_right").removeClass("bcr_pad");
$(".b_bottom_right").removeClass("bbr_pad");
$(".b_bottom_left").removeClass("bbl_pad");
$(".b_bottom_center").removeClass("bbc_pad");
$("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
$("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_display").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_name").removeClass("pad_color");
$(".style_select").removeClass("pad_select");
} else {
$(".b_top_left").addClass("btl_pad");
$(".b_top_center").addClass("btc_pad");
$(".b_top_right").addClass("btr_pad");
$(".b_center_left").addClass("bcl_pad");
$(".b_center_right").addClass("bcr_pad");
$(".b_bottom_right").addClass("bbr_pad");
$(".b_bottom_left").addClass("bbl_pad");
$(".b_bottom_center").addClass("bbc_pad");
$("#wgt_reload").addClass("pad_color").addClass("pad_reload");
$("#wgt_edit").addClass("pad_color").addClass("pad_edit");
$("#wgt_display").addClass("pad_color").addClass("pad_edit");
$("#wgt_name").addClass("pad_color");
$(".style_select").addClass("pad_select");
}
}
function onDropTarget(obj, event) {
if (event.dataTransfer) {
var format = "text/plain";
var textData = event.dataTransfer.getData(format);
if (!textData) {
alert(":(");
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
if(tmp_type.substr(0, 5) == "audio"){
var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", tmp);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='0'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
} else {
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore($(obj).find(".add_img"));
$("<div class='close_img'>").appendTo(img_block);
$("<input type='hidden' value='0'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
var tmp_img = $("<img src=\"" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width())
tmp_img.attr("height", "120");
else{
tmp_img.attr("width","120");
tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
}
}, 6);
}
}
else {
alert ("Your browser does not support the dataTransfer object.");
}
if (event.stopPropagation) {
event.stopPropagation ();
}
else {
event.cancelBubble = true;
}
return false;
}

@ -1,457 +0,0 @@
var sankoreLang = {
display: "Afficher",
edit: "Modifier",
short_desc: "Sélectionner les animaux dans la liste suivante:",
add: "Nouveau bloc",
enter: "Saisir votre consigne ici ...",
cat: "chat",
ball: "balle",
shovel: "pelle",
dog: "chien",
tree: "arbre",
wgt_name: "Sélectionner",
reload: "Recharger",
slate: "Bois",
pad: "Pad"
};
//main function
function start(){
$("#wgt_display").text(sankoreLang.display);
$("#wgt_edit").text(sankoreLang.edit);
$("#wgt_name").text(sankoreLang.wgt_name);
$("#wgt_reload").text(sankoreLang.reload);
$(".style_select option[value='1']").text(sankoreLang.slate);
$(".style_select option[value='2']").text(sankoreLang.pad);
if(window.sankore){
if(sankore.preference("selectionner","")){
var data = jQuery.parseJSON(sankore.preference("selectionner",""));
importData(data);
} else
showExample();
if(sankore.preference("sel_style","")){
changeStyle(sankore.preference("sel_style",""));
$(".style_select").val(sankore.preference("sel_style",""));
} else
changeStyle(1)
}
else
showExample();
//events
if (window.widget) {
window.widget.onleave = function(){
exportData();
sankore.setPreference("sel_style", $(".style_select").find("option:selected").val());
}
}
$("#wgt_reload").click(function(){
window.location.reload();
});
$(".style_select").change(function (event){
changeStyle($(this).find("option:selected").val());
})
$("#wgt_display, #wgt_edit").click(function(event){
if(this.id == "wgt_display"){
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(false);
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$(".style_select").css("display","none");
$(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
container.find(".close_cont").remove();
container.find(".imgs_cont").removeAttr("ondragenter")
.removeAttr("ondragleave")
.removeAttr("ondragover")
.removeAttr("ondrop");
container.find(".img_block, .text_block").each(function(){
$(this).find(".close_img").remove();
$(this).find(".text_subblock").removeAttr("contenteditable");
$(this).find("input:checkbox").removeAttr("checked")
});
});
$(this).css("display", "none");
$("#wgt_edit").css("display", "block");
}
} else {
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$(".style_select").css("display","block");
$(".cont").each(function(){
var container = $(this);
$("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
container.find(".imgs_cont").removeClass("right")
.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
var add_img = $("<div class='add_img'>");
container.find(".img_block, .text_block").each(function(){
$("<div class='close_img'>").appendTo($(this));
if($(this).find("input:hidden").val() == 0)
$(this).find("input:checkbox").attr('checked', false);
else
$(this).find("input:checkbox").attr('checked', true);
$(this).find(".text_subblock").attr("contenteditable","true");
});
add_img.insertBefore(container.find(".clear"));
});
$("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
}
});
//add new block
$(".add_block").live("click", function(){
addContainer();
});
//checkbox events
$("input:checkbox").live("click", function(){
if($("#wgt_display").hasClass("selected")){
var flag = true;
var block = $(this).parent().parent();
block.find(".text_block, .img_block, .audio_block").each(function(){
if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
flag = false;
else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
flag = false;
});
if(flag)
block.addClass("right");
else
block.removeClass("right");
} else {
if($(this).is(":checked"))
$(this).parent().find("input:hidden").val(1);
else
$(this).parent().find("input:hidden").val(0);
}
});
//play/pause event
$(".play, .stop").live("click", function(){
var tmp_audio = $(this);
var audio = tmp_audio.parent().find("audio").get(0);
if($(this).hasClass("play")){
if(tmp_audio.parent().find("source").attr("src")){
tmp_audio.removeClass("play").addClass("stop");
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.play();
}
} else {
$(this).removeClass("stop").addClass("play");
clearInterval( tmp_audio.parent().find("input").val())
audio.pause();
}
});
$(".replay").live("click", function(){
var tmp_audio = $(this).prev();
var audio = $(this).parent().find("audio").get(0);
if(tmp_audio.parent().find("source").attr("src")){
$(this).prev().removeClass("play").addClass("stop");
clearInterval($(this).parent().find("input").val());
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.currentTime = 0;
audio.play();
}
});
//adding new img
$(".add_img").live("click", function(){
addTextBlock($(this));
});
//deleting a block
$(".close_cont").live("click",function(){
$(this).parent().remove();
refreshBlockNumbers();
});
//deleting the img block
$(".close_img").live("click", function(){
$(this).parent().remove();
});
}
//export
function exportData(){
var array_to_export = [];
$(".cont").each(function(){
var cont_obj = new Object();
cont_obj.text = $(this).find(".text_cont").text();
cont_obj.blocks = [];
$(this).find(".img_block, .audio_block, .text_block").each(function(){
var tmp_block = new Object();
if($(this).hasClass("img_block")){
if($(this).find(".audio_block").size() == 0){
tmp_block.src = $(this).find("img").attr("src").replace("../../","");
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.h = $(this).find("img").height();
tmp_block.w = $(this).find("img").width();
tmp_block.type = "img";
}
}
if($(this).hasClass("audio_block")){
tmp_block.src = $(this).find("source").attr("src").replace("../../","");
tmp_block.hidden = $(this).parent().find("input:hidden").val();
tmp_block.type = "audio";
}
if($(this).hasClass("text_block")){
tmp_block.text = $(this).find(".text_subblock").text();
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.type = "text";
}
cont_obj.blocks.push(tmp_block);
});
array_to_export.push(cont_obj);
});
sankore.setPreference("selectionner", JSON.stringify(array_to_export));
}
//import
function importData(data){
var tmp = 0;
for(var i in data){
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='clear'>").appendTo(imgs_container);
$("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
$("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].blocks){
switch(data[i].blocks[j].type){
case "text":
var text_block = $("<div class='text_block'>").insertBefore(imgs_container.find(".clear"));
$("<div class='text_subblock'>" + data[i].blocks[j].text + "</div>").appendTo(text_block);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(text_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(text_block);
break;
case "img":
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore(imgs_container.find(".clear"));
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
$("<img src=\"../../" + data[i].blocks[j].src + "\" width='" + data[i].blocks[j].w + "' height='" + data[i].blocks[j].h + "' style=\"display: inline;\"/>").appendTo(img_block);
break;
case "audio":
var img_tmp = $("<div class='img_block'>").insertBefore(imgs_container.find(".clear"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp);
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", "../../" + data[i].blocks[j].src);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
break;
}
}
}
}
//example
function showExample(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.cat + "</div>").appendTo(tmp1);
$("<input type='hidden' value='1'/>").appendTo(tmp1);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp1)
var tmp2 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.ball + "</div>").appendTo(tmp2);
$("<input type='hidden' value='0'/>").appendTo(tmp2);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp2)
var tmp3 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.shovel + "</div>").appendTo(tmp3);
$("<input type='hidden' value='0'/>").appendTo(tmp3);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp3)
var tmp4 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.dog + "</div>").appendTo(tmp4);
$("<input type='hidden' value='1'/>").appendTo(tmp4);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp4)
var tmp5 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.tree + "</div>").appendTo(tmp5);
$("<input type='hidden' value='0'/>").appendTo(tmp5);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp5)
$("<div class='clear'>").appendTo(imgs_container);
container.appendTo("#data")
}
//add new container
function addContainer(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
imgs_container.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
$("<div class='close_cont'>").appendTo(container);
$("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
$("<div class='add_img'>").appendTo(imgs_container);
$("<div class='clear'>").appendTo(imgs_container);
container.insertBefore($(".add_block"));
}
//add new img block
function addTextBlock(dest){
var tmp = $("<div class='text_block'>").insertBefore(dest)
$("<div class='text_subblock' contenteditable='true'>" + sankoreLang.enter + "</div>").appendTo(tmp);
$("<input type='hidden' value='0'/>").appendTo(tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp);
$("<div class='close_img'>").appendTo(tmp);
}
function refreshBlockNumbers(){
var i = 0;
$(".cont").each(function(){
$(this).find(".number_cont").text(++i);
})
}
function stringToXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
//changing the style
function changeStyle(val){
if(val == 1){
$(".b_top_left").removeClass("btl_pad");
$(".b_top_center").removeClass("btc_pad");
$(".b_top_right").removeClass("btr_pad");
$(".b_center_left").removeClass("bcl_pad");
$(".b_center_right").removeClass("bcr_pad");
$(".b_bottom_right").removeClass("bbr_pad");
$(".b_bottom_left").removeClass("bbl_pad");
$(".b_bottom_center").removeClass("bbc_pad");
$("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
$("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_display").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_name").removeClass("pad_color");
$(".style_select").removeClass("pad_select");
} else {
$(".b_top_left").addClass("btl_pad");
$(".b_top_center").addClass("btc_pad");
$(".b_top_right").addClass("btr_pad");
$(".b_center_left").addClass("bcl_pad");
$(".b_center_right").addClass("bcr_pad");
$(".b_bottom_right").addClass("bbr_pad");
$(".b_bottom_left").addClass("bbl_pad");
$(".b_bottom_center").addClass("bbc_pad");
$("#wgt_reload").addClass("pad_color").addClass("pad_reload");
$("#wgt_edit").addClass("pad_color").addClass("pad_edit");
$("#wgt_display").addClass("pad_color").addClass("pad_edit");
$("#wgt_name").addClass("pad_color");
$(".style_select").addClass("pad_select");
}
}
function onDropTarget(obj, event) {
if (event.dataTransfer) {
var format = "text/plain";
var textData = event.dataTransfer.getData(format);
if (!textData) {
alert(":(");
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
if(tmp_type.substr(0, 5) == "audio"){
var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", "../../" + tmp);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='0'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
} else {
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore($(obj).find(".add_img"));
$("<div class='close_img'>").appendTo(img_block);
$("<input type='hidden' value='0'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
var tmp_img = $("<img src=\"../../" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width())
tmp_img.attr("height", "120");
else{
tmp_img.attr("width","120");
tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
}
}, 6);
}
}
else {
alert ("Your browser does not support the dataTransfer object.");
}
if (event.stopPropagation) {
event.stopPropagation ();
}
else {
event.cancelBubble = true;
}
return false;
}

@ -1,457 +0,0 @@
var sankoreLang = {
display: "Показать",
edit: "Изменить",
short_desc: "Выберите животных из следующего списка:",
add: "Новый блок",
enter: "Введите текст ...",
cat: "кот",
ball: "мяч",
shovel: "лопата",
dog: "собака",
tree: "дерево",
wgt_name: "Выбрать верное",
reload: "Обновить",
slate: "Узор",
pad: "Планшет"
};
//main function
function start(){
$("#wgt_display").text(sankoreLang.display);
$("#wgt_edit").text(sankoreLang.edit);
$("#wgt_name").text(sankoreLang.wgt_name);
$("#wgt_reload").text(sankoreLang.reload);
$(".style_select option[value='1']").text(sankoreLang.slate);
$(".style_select option[value='2']").text(sankoreLang.pad);
if(window.sankore){
if(sankore.preference("selectionner","")){
var data = jQuery.parseJSON(sankore.preference("selectionner",""));
importData(data);
} else
showExample();
if(sankore.preference("sel_style","")){
changeStyle(sankore.preference("sel_style",""));
$(".style_select").val(sankore.preference("sel_style",""));
} else
changeStyle(1)
}
else
showExample();
//events
if (window.widget) {
window.widget.onleave = function(){
exportData();
sankore.setPreference("sel_style", $(".style_select").find("option:selected").val());
}
}
$("#wgt_reload").click(function(){
window.location.reload();
});
$(".style_select").change(function (event){
changeStyle($(this).find("option:selected").val());
})
$("#wgt_display, #wgt_edit").click(function(event){
if(this.id == "wgt_display"){
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(false);
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$(".style_select").css("display","none");
$(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
container.find(".close_cont").remove();
container.find(".imgs_cont").removeAttr("ondragenter")
.removeAttr("ondragleave")
.removeAttr("ondragover")
.removeAttr("ondrop");
container.find(".img_block, .text_block").each(function(){
$(this).find(".close_img").remove();
$(this).find(".text_subblock").removeAttr("contenteditable");
$(this).find("input:checkbox").removeAttr("checked")
});
});
$(this).css("display", "none");
$("#wgt_edit").css("display", "block");
}
} else {
if(!$(this).hasClass("selected")){
if(window.sankore)
sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$(".style_select").css("display","block");
$(".cont").each(function(){
var container = $(this);
$("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
container.find(".imgs_cont").removeClass("right")
.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
var add_img = $("<div class='add_img'>");
container.find(".img_block, .text_block").each(function(){
$("<div class='close_img'>").appendTo($(this));
if($(this).find("input:hidden").val() == 0)
$(this).find("input:checkbox").attr('checked', false);
else
$(this).find("input:checkbox").attr('checked', true);
$(this).find(".text_subblock").attr("contenteditable","true");
});
add_img.insertBefore(container.find(".clear"));
});
$("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
}
});
//add new block
$(".add_block").live("click", function(){
addContainer();
});
//checkbox events
$("input:checkbox").live("click", function(){
if($("#wgt_display").hasClass("selected")){
var flag = true;
var block = $(this).parent().parent();
block.find(".text_block, .img_block, .audio_block").each(function(){
if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
flag = false;
else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
flag = false;
});
if(flag)
block.addClass("right");
else
block.removeClass("right");
} else {
if($(this).is(":checked"))
$(this).parent().find("input:hidden").val(1);
else
$(this).parent().find("input:hidden").val(0);
}
});
//play/pause event
$(".play, .stop").live("click", function(){
var tmp_audio = $(this);
var audio = tmp_audio.parent().find("audio").get(0);
if($(this).hasClass("play")){
if(tmp_audio.parent().find("source").attr("src")){
tmp_audio.removeClass("play").addClass("stop");
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.play();
}
} else {
$(this).removeClass("stop").addClass("play");
clearInterval( tmp_audio.parent().find("input").val())
audio.pause();
}
});
$(".replay").live("click", function(){
var tmp_audio = $(this).prev();
var audio = $(this).parent().find("audio").get(0);
if(tmp_audio.parent().find("source").attr("src")){
$(this).prev().removeClass("play").addClass("stop");
clearInterval($(this).parent().find("input").val());
var id = setInterval(function(){
if(audio.currentTime == audio.duration){
clearInterval(id);
tmp_audio.removeClass("stop").addClass("play");
}
}, 10);
tmp_audio.parent().find("input").val(id);
audio.currentTime = 0;
audio.play();
}
});
//adding new img
$(".add_img").live("click", function(){
addTextBlock($(this));
});
//deleting a block
$(".close_cont").live("click",function(){
$(this).parent().remove();
refreshBlockNumbers();
});
//deleting the img block
$(".close_img").live("click", function(){
$(this).parent().remove();
});
}
//export
function exportData(){
var array_to_export = [];
$(".cont").each(function(){
var cont_obj = new Object();
cont_obj.text = $(this).find(".text_cont").text();
cont_obj.blocks = [];
$(this).find(".img_block, .audio_block, .text_block").each(function(){
var tmp_block = new Object();
if($(this).hasClass("img_block")){
if($(this).find(".audio_block").size() == 0){
tmp_block.src = $(this).find("img").attr("src").replace("../../","");
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.h = $(this).find("img").height();
tmp_block.w = $(this).find("img").width();
tmp_block.type = "img";
}
}
if($(this).hasClass("audio_block")){
tmp_block.src = $(this).find("source").attr("src").replace("../../","");
tmp_block.hidden = $(this).parent().find("input:hidden").val();
tmp_block.type = "audio";
}
if($(this).hasClass("text_block")){
tmp_block.text = $(this).find(".text_subblock").text();
tmp_block.hidden = $(this).find("input:hidden").val();
tmp_block.type = "text";
}
cont_obj.blocks.push(tmp_block);
});
array_to_export.push(cont_obj);
});
sankore.setPreference("selectionner", JSON.stringify(array_to_export));
}
//import
function importData(data){
var tmp = 0;
for(var i in data){
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='clear'>").appendTo(imgs_container);
$("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
$("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].blocks){
switch(data[i].blocks[j].type){
case "text":
var text_block = $("<div class='text_block'>").insertBefore(imgs_container.find(".clear"));
$("<div class='text_subblock'>" + data[i].blocks[j].text + "</div>").appendTo(text_block);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(text_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(text_block);
break;
case "img":
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore(imgs_container.find(".clear"));
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
$("<img src=\"../../" + data[i].blocks[j].src + "\" width='" + data[i].blocks[j].w + "' height='" + data[i].blocks[j].h + "' style=\"display: inline;\"/>").appendTo(img_block);
break;
case "audio":
var img_tmp = $("<div class='img_block'>").insertBefore(imgs_container.find(".clear"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp);
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", "../../" + data[i].blocks[j].src);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
break;
}
}
}
}
//example
function showExample(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.cat + "</div>").appendTo(tmp1);
$("<input type='hidden' value='1'/>").appendTo(tmp1);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp1)
var tmp2 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.ball + "</div>").appendTo(tmp2);
$("<input type='hidden' value='0'/>").appendTo(tmp2);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp2)
var tmp3 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.shovel + "</div>").appendTo(tmp3);
$("<input type='hidden' value='0'/>").appendTo(tmp3);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp3)
var tmp4 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.dog + "</div>").appendTo(tmp4);
$("<input type='hidden' value='1'/>").appendTo(tmp4);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp4)
var tmp5 = $("<div class='text_block'>").appendTo(imgs_container);
$("<div class='text_subblock'>" + sankoreLang.tree + "</div>").appendTo(tmp5);
$("<input type='hidden' value='0'/>").appendTo(tmp5);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp5)
$("<div class='clear'>").appendTo(imgs_container);
container.appendTo("#data")
}
//add new container
function addContainer(){
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
imgs_container.attr("ondragenter", "return false;")
.attr("ondragleave", "$(this).removeClass('over'); return false;")
.attr("ondragover", "$(this).addClass('over'); return false;")
.attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
$("<div class='close_cont'>").appendTo(container);
$("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
$("<div class='add_img'>").appendTo(imgs_container);
$("<div class='clear'>").appendTo(imgs_container);
container.insertBefore($(".add_block"));
}
//add new img block
function addTextBlock(dest){
var tmp = $("<div class='text_block'>").insertBefore(dest)
$("<div class='text_subblock' contenteditable='true'>" + sankoreLang.enter + "</div>").appendTo(tmp);
$("<input type='hidden' value='0'/>").appendTo(tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(tmp);
$("<div class='close_img'>").appendTo(tmp);
}
function refreshBlockNumbers(){
var i = 0;
$(".cont").each(function(){
$(this).find(".number_cont").text(++i);
})
}
function stringToXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
//changing the style
function changeStyle(val){
if(val == 1){
$(".b_top_left").removeClass("btl_pad");
$(".b_top_center").removeClass("btc_pad");
$(".b_top_right").removeClass("btr_pad");
$(".b_center_left").removeClass("bcl_pad");
$(".b_center_right").removeClass("bcr_pad");
$(".b_bottom_right").removeClass("bbr_pad");
$(".b_bottom_left").removeClass("bbl_pad");
$(".b_bottom_center").removeClass("bbc_pad");
$("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
$("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_display").removeClass("pad_color").removeClass("pad_edit");
$("#wgt_name").removeClass("pad_color");
$(".style_select").removeClass("pad_select");
} else {
$(".b_top_left").addClass("btl_pad");
$(".b_top_center").addClass("btc_pad");
$(".b_top_right").addClass("btr_pad");
$(".b_center_left").addClass("bcl_pad");
$(".b_center_right").addClass("bcr_pad");
$(".b_bottom_right").addClass("bbr_pad");
$(".b_bottom_left").addClass("bbl_pad");
$(".b_bottom_center").addClass("bbc_pad");
$("#wgt_reload").addClass("pad_color").addClass("pad_reload");
$("#wgt_edit").addClass("pad_color").addClass("pad_edit");
$("#wgt_display").addClass("pad_color").addClass("pad_edit");
$("#wgt_name").addClass("pad_color");
$(".style_select").addClass("pad_select");
}
}
function onDropTarget(obj, event) {
if (event.dataTransfer) {
var format = "text/plain";
var textData = event.dataTransfer.getData(format);
if (!textData) {
alert(":(");
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
if(tmp_type.substr(0, 5) == "audio"){
var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
$("<div class='close_img'>").appendTo(img_tmp);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
var source = $("<source/>").attr("src", "../../" + tmp);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden' value='0'/>").appendTo(img_tmp);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
} else {
var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore($(obj).find(".add_img"));
$("<div class='close_img'>").appendTo(img_block);
$("<input type='hidden' value='0'/>").appendTo(img_block);
$("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
var tmp_img = $("<img src=\"../../" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width())
tmp_img.attr("height", "120");
else{
tmp_img.attr("width","120");
tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
}
}, 6);
}
}
else {
alert ("Your browser does not support the dataTransfer object.");
}
if (event.stopPropagation) {
event.stopPropagation ();
}
else {
event.cancelBubble = true;
}
return false;
}

@ -299,6 +299,7 @@
<file>images/virtual.keyboard/41/right-active.png</file>
<file>images/virtual.keyboard/41/backspace.png</file>
<file>images/virtual.keyboard/41/capslock.png</file>
<file>images/virtual.keyboard/41/shift.png</file>
<file>images/virtual.keyboard/41/tab.png</file>
<file>images/virtual.keyboard/29/centre-passive.png</file>
<file>images/virtual.keyboard/29/left-passive.png</file>
@ -308,6 +309,7 @@
<file>images/virtual.keyboard/29/right-active.png</file>
<file>images/virtual.keyboard/29/backspace.png</file>
<file>images/virtual.keyboard/29/capslock.png</file>
<file>images/virtual.keyboard/29/shift.png</file>
<file>images/virtual.keyboard/29/tab.png</file>
<file>images/toolPalette/cacheTool.png</file>
<file>images/libpalette/FlashCategory.svg</file>

@ -58,3 +58,4 @@ UBKeyboardLocale** UBPlatformUtils::getKeyboardLayouts(int& nCount)
nCount = nKeyboardLayouts;
return keyboardLayouts;
}

@ -23,30 +23,82 @@ class QMainWindow;
#define SYMBOL_KEYS_COUNT 47
struct KEYCODE{
KEYCODE()
:symbol(0)
,code(0)
,modifier(0)
{}
KEYCODE(int _symbol)
:symbol(_symbol)
,code(0)
,modifier(0)
{}
KEYCODE(int _symbol,
unsigned char _code,
int _modifier)
:symbol(_symbol)
,code(_code)
,modifier(_modifier)
{}
bool empty() const
{
return symbol == 0;
}
int symbol;
unsigned char code;
int modifier;
};
struct KEYBT
{
const QChar symbol1;
const int code1;
const QChar symbol2;
const int code2;
QChar symbol1;
QChar symbol2;
bool capsLockSwitch;
int modifier1;
int modifier2;
KEYCODE codes[8];
KEYBT( QChar _symbol1,
QChar _symbol2,
bool _capsLockSwitch,
int _modifier1,
int _modifier2,
KEYCODE c1 = 0,
KEYCODE c2 = 0,
KEYCODE c3 = 0,
KEYCODE c4 = 0,
KEYCODE c5 = 0,
KEYCODE c6 = 0,
KEYCODE c7 = 0,
KEYCODE c8 = 0)
:symbol1(_symbol1)
,symbol2(_symbol2)
,capsLockSwitch(_capsLockSwitch)
,modifier1(_modifier1)
,modifier2(_modifier2)
{
codes[0] = c1;
codes[1] = c2;
codes[2] = c3;
codes[3] = c4;
codes[4] = c5;
codes[5] = c6;
codes[6] = c7;
codes[7] = c8;
}
KEYBT(unsigned int _symbol1,
unsigned int _symbol2):
symbol1(_symbol1),
code1(_symbol1),
symbol2(_symbol2),
code2(_symbol2){}
~KEYBT()
{}
};
KEYBT(QChar _symbol1,
int _code1,
QChar _symbol2,
int _code2):
symbol1(_symbol1),
code1(_code1),
symbol2(_symbol2),
code2(_code2){}
};
class UBKeyboardLocale
{
@ -63,7 +115,7 @@ struct KEYBT
const QString& _name,
const QString& _id,
QIcon* _icon,
const KEYBT _symbols[])
KEYBT _symbols[])
:fullName(_fullName),name(_name), id(_id), icon(_icon),
constSymbols(_symbols), varSymbols(NULL)
{}
@ -74,12 +126,12 @@ struct KEYBT
const QString name;
const QString id;
QIcon* icon;
const KEYBT* operator[] (int index) const
KEYBT* operator[] (int index) const
{
return (varSymbols==NULL)? constSymbols + index : varSymbols[index];
}
private:
const KEYBT* constSymbols;
KEYBT* constSymbols;
KEYBT** varSymbols;
};

@ -104,283 +104,294 @@ void UBPlatformUtils::setDesktopMode(bool desktop)
Q_UNUSED(desktop);
}
const KEYBT ENGLISH_LOCALE[] = {
/* ` ~ */ KEYBT(0x60, 0x7e),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 @ */ KEYBT(0x32, 0x40),
/* 3 # */ KEYBT(0x33, 0x23),
/* 4 $ */ KEYBT(0x34, 0x24),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 ^ */ KEYBT(0x36, 0x88),
/* 7 & */ KEYBT(0x37, 0x26),
/* 8 * */ KEYBT(0x38, 0x2a),
/* 9 ( */ KEYBT(0x39, 0x28),
/* 0 ) */ KEYBT(0x30, 0x29),
/* - _ */ KEYBT(0x2d, 0x5f),
/* = + */ KEYBT(0x3d, 0x2b),
/* q Q */ KEYBT(0x71, 0x51),
/* w W */ KEYBT(0x77, 0x57),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* y Y */ KEYBT(0x79, 0x59),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* [ { */ KEYBT(0x5b, 0x7b),
/* ] } */ KEYBT(0x5d, 0x7d),
/* a A */ KEYBT(0x61, 0x41),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* ; : */ KEYBT(0x3b, 0x3a),
/* ' " */ KEYBT(0x27, 0x22),
/* \ | */ KEYBT(0x5c, 0x7c),
/* z Z */ KEYBT(0x7a, 0x5a),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* m M */ KEYBT(0x6d, 0x4d),
/* , < */ KEYBT(0x2c, 0x3c),
/* . > */ KEYBT(0x2e, 0x3e),
/* / ? */ KEYBT(0x2f, 0x5f)};
const KEYBT RUSSIAN_LOCALE [] =
#define KEYBTDECL(s1, s2, clSwitch, code) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(s1, code, 0), KEYCODE(s2, code, 1))
#define KEYBTDECLEX1(s1, s2, clSwitch, code, cs1, cs2) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(cs1, code, 0), KEYCODE(cs2, code, 1))
#define KEYBTDECLEX2(s1, s2, clSwitch, code, cs1, cs2) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(cs1, code, 2), KEYCODE(cs2, code, 3))
#define KEYBTDECLEX6(s1, s2, clSwitch, code, cs1, cs2, cs3, cs4, cs5, cs6) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(cs1, code, 0), KEYCODE(cs2, code, 1), KEYCODE(cs3, code, 2), KEYCODE(cs4, code, 3), KEYCODE(cs5, code, 4), KEYCODE(cs6, code, 5))
#define KEYBTDECLEX8(s1, s2, clSwitch, code, cs1, cs2, cs3, cs4, cs5, cs6, cs7, cs8) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(cs1, code, 0), KEYCODE(cs2, code, 1), KEYCODE(cs3, code, 2), KEYCODE(cs4, code, 3), KEYCODE(cs5, code, 4), KEYCODE(cs6, code, 5), KEYCODE(cs7, code, 6), KEYCODE(cs8, code, 7))
KEYBT ENGLISH_LOCALE[] = {
/* ` ~ */ KEYBTDECL(0x60, 0x7e, false, 41),
/* 1 ! */ KEYBTDECL(0x31, 0x21, false, 2),
/* 2 @ */ KEYBTDECL(0x32, 0x40, false, 3),
/* 3 # */ KEYBTDECL(0x33, 0x23, false, 4),
/* 4 $ */ KEYBTDECL(0x34, 0x24, false, 5),
/* 5 % */ KEYBTDECL(0x35, 0x25, false, 6),
/* 6 ^ */ KEYBTDECL(0x36, 0x88, false, 7),
/* 7 & */ KEYBTDECL(0x37, 0x26, false, 8),
/* 8 * */ KEYBTDECL(0x38, 0x2a, false, 9),
/* 9 ( */ KEYBTDECL(0x39, 0x28, false, 10),
/* 0 ) */ KEYBTDECL(0x30, 0x29, false, 11),
/* - _ */ KEYBTDECL(0x2d, 0x5f, false, 12),
/* = + */ KEYBTDECL(0x3d, 0x2b, false, 13),
/* q Q */ KEYBTDECL(0x71, 0x51, true, 16),
/* w W */ KEYBTDECL(0x77, 0x57, true, 17),
/* e E */ KEYBTDECL(0x65, 0x45, true, 18),
/* r R */ KEYBTDECL(0x72, 0x52, true, 19),
/* t T */ KEYBTDECL(0x74, 0x54, true, 20),
/* y Y */ KEYBTDECL(0x79, 0x59, true, 21),
/* u U */ KEYBTDECL(0x75, 0x55, true, 22),
/* i I */ KEYBTDECL(0x69, 0x49, true, 23),
/* o O */ KEYBTDECL(0x6f, 0x4f, true, 24),
/* p P */ KEYBTDECL(0x70, 0x50, true, 25),
/* [ { */ KEYBTDECL(0x5b, 0x7b, false, 26),
/* ] } */ KEYBTDECL(0x5d, 0x7d, false, 27),
/* a A */ KEYBTDECL(0x61, 0x41, true, 30),
/* s S */ KEYBTDECL(0x73, 0x53, true, 31),
/* d D */ KEYBTDECL(0x64, 0x44, true, 32),
/* f F */ KEYBTDECL(0x66, 0x46, true, 33),
/* g G */ KEYBTDECL(0x67, 0x47, true, 34),
/* h H */ KEYBTDECL(0x68, 0x48, true, 35),
/* j J */ KEYBTDECL(0x6a, 0x4a, true, 36),
/* k K */ KEYBTDECL(0x6b, 0x4b, true, 37),
/* l L */ KEYBTDECL(0x6c, 0x4c, true, 38),
/* ; : */ KEYBTDECL(0x3b, 0x3a, false, 39),
/* ' " */ KEYBTDECL(0x27, 0x22, false, 40),
/* \ | */ KEYBTDECL(0x5c, 0x7c, false, 43),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true, 44),
/* x X */ KEYBTDECL(0x78, 0x58, true, 45),
/* c C */ KEYBTDECL(0x63, 0x43, true, 46),
/* v V */ KEYBTDECL(0x76, 0x56, true, 47),
/* b B */ KEYBTDECL(0x62, 0x42, true, 48),
/* n N */ KEYBTDECL(0x6e, 0x4e, true, 49),
/* m M */ KEYBTDECL(0x6d, 0x4d, true, 50),
/* , < */ KEYBTDECL(0x2c, 0x3c, false, 51),
/* . > */ KEYBTDECL(0x2e, 0x3e, false, 52),
/* / ? */ KEYBTDECL(0x2f, 0x5f, false, 53)};
KEYBT RUSSIAN_LOCALE [] =
{
/* ё Ё */ KEYBT(0x451, XK_Cyrillic_io, 0x401, XK_Cyrillic_IO),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 " */ KEYBT(0x32, 0x5c),
/* 3 № */ KEYBT(0x33, 0x33, 0x2116, XK_numerosign),
/* 4 ; */ KEYBT(0x34, 0x3b),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 : */ KEYBT(0x36, 0x3a),
/* 7 ? */ KEYBT(0x37, 0x3f),
/* 8 * */ KEYBT(0x38, 0x2a),
/* 9 ( */ KEYBT(0x39, 0x28),
/* 0 ) */ KEYBT(0x30, 0x29),
/* - _ */ KEYBT(0x2d, 0x4f),
/* = + */ KEYBT(0x3d, 0x2b),
/* й Й */ KEYBT(0x439, XK_Cyrillic_shorti, 0x419, XK_Cyrillic_SHORTI),
/* ц Ц */ KEYBT(0x446, XK_Cyrillic_tse, 0x426, XK_Cyrillic_TSE),
/* у У */ KEYBT(0x443, XK_Cyrillic_u, 0x423, XK_Cyrillic_U),
/* к К */ KEYBT(0x43a, XK_Cyrillic_ka, 0x41a, XK_Cyrillic_KA),
/* е Е */ KEYBT(0x435, XK_Cyrillic_ie, 0x415, XK_Cyrillic_IE),
/* н Н */ KEYBT(0x43d, XK_Cyrillic_en, 0x41d, XK_Cyrillic_EN),
/* г Г */ KEYBT(0x433, XK_Cyrillic_ghe, 0x413, XK_Cyrillic_GHE),
/* ш Ш */ KEYBT(0x448, XK_Cyrillic_sha, 0x428, XK_Cyrillic_SHA),
/* щ Щ */ KEYBT(0x449, XK_Cyrillic_shcha, 0x429, XK_Cyrillic_SHCHA),
/* з З */ KEYBT(0x437, XK_Cyrillic_ze, 0x417, XK_Cyrillic_ZE),
/* х Х */ KEYBT(0x445, XK_Cyrillic_ha, 0x425, XK_Cyrillic_HA),
/* ъ Ъ */ KEYBT(0x44a, XK_Cyrillic_hardsign, 0x42a, XK_Cyrillic_HARDSIGN),
/* ф Ф */ KEYBT(0x444, XK_Cyrillic_ef, 0x424, XK_Cyrillic_EF),
/* ы Ы */ KEYBT(0x44b, XK_Cyrillic_yeru, 0x42b, XK_Cyrillic_YERU),
/* в В */ KEYBT(0x432, XK_Cyrillic_ve, 0x412, XK_Cyrillic_VE),
/* а А */ KEYBT(0x430, XK_Cyrillic_a, 0x410, XK_Cyrillic_A),
/* п П */ KEYBT(0x43f, XK_Cyrillic_pe, 0x41f, XK_Cyrillic_PE),
/* р Р */ KEYBT(0x440, XK_Cyrillic_er, 0x420, XK_Cyrillic_ER),
/* о О */ KEYBT(0x43e, XK_Cyrillic_o, 0x41e, XK_Cyrillic_O),
/* л Л */ KEYBT(0x43b, XK_Cyrillic_el, 0x41b, XK_Cyrillic_EL),
/* д Д */ KEYBT(0x434, XK_Cyrillic_de, 0x414, XK_Cyrillic_DE),
/* ж Ж */ KEYBT(0x436, XK_Cyrillic_zhe, 0x416, XK_Cyrillic_ZHE),
/* э Э */ KEYBT(0x44d, XK_Cyrillic_e, 0x42d, XK_Cyrillic_E),
/* \ / */ KEYBT(0x5c, 0x2f),
/* я Я */ KEYBT(0x44f, XK_Cyrillic_ya, 0x42f, XK_Cyrillic_YA),
/* ч Ч */ KEYBT(0x447, XK_Cyrillic_che, 0x427, XK_Cyrillic_CHE),
/* с С */ KEYBT(0x441, XK_Cyrillic_es, 0x421, XK_Cyrillic_ES),
/* м М */ KEYBT(0x43c, XK_Cyrillic_em, 0x41c, XK_Cyrillic_EM),
/* и И */ KEYBT(0x438, XK_Cyrillic_i, 0x418, XK_Cyrillic_I),
/* т Т */ KEYBT(0x442, XK_Cyrillic_te, 0x422, XK_Cyrillic_TE),
/* ь Ь */ KEYBT(0x44c, XK_Cyrillic_softsign, 0x42c, XK_Cyrillic_SOFTSIGN),
/* б Б */ KEYBT(0x431, XK_Cyrillic_be, 0x411, XK_Cyrillic_BE),
/* ю Ю */ KEYBT(0x44e, XK_Cyrillic_yu, 0x42e, XK_Cyrillic_YU),
/* . , */ KEYBT(0x2e, 0x2c)};
const KEYBT FRENCH_LOCALE[] = {
/* ? ? */ KEYBT(0xb2, XK_twosuperior, 0xb2, XK_twosuperior),
/* & 1 */ KEYBT(0x26, 0x31),
/* ? 2 */ KEYBT(0xe9, 0x32),
/* " 3 */ KEYBT(0x22, 0x33),
/* ' 4 */ KEYBT(0x27, 0x34),
/* ( 5 */ KEYBT(0x28, 0x35),
/* - 6 */ KEYBT(0x2d, 0x36),
/* ? 7 */ KEYBT(0xe8, XK_egrave, 0x37, 0x37),
/* _ 8 */ KEYBT(0x5f, 0x38),
/* ? 9 */ KEYBT(0xe7, XK_ccedilla, 0x39, 0x39),
/* ? 0 */ KEYBT(0xe0, 0x30),
/* ) ? */ KEYBT(0x29, 0xb0),
/* = + */ KEYBT(0x3d, 0x2b),
/* a A */ KEYBT(0x61, 0x41),
/* z Z */ KEYBT(0x7a, 0x5a),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* y Y */ KEYBT(0x79, 0x59),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* ^ ? */ KEYBT(0x5e, 0xa8),
/* $ ? } */ KEYBT(0x24, 0xa3),
/* q Q */ KEYBT(0x71, 0x51),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* m M */ KEYBT(0x6d, 0x4d),
/* ? % */ KEYBT(0xf9, 0x25),
/* * ? */ KEYBT(0x2a, 0xb5),
/* w W */ KEYBT(0x77, 0x57),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* , ? */ KEYBT(0x2c, 0x3f),
/* ; . */ KEYBT(0x3b, 0x2e),
/* : / */ KEYBT(0x3a, 0x2f),
/* ! ? */ KEYBT(0x21, 0xa7)};
const KEYBT SWISS_FRENCH_LOCALE[] = {
/* § °*/ KEYBT(0xa7, 0xb0),
/* 1 +*/ KEYBT(0x31, 0x2b),
/* 2 "*/ KEYBT(0x32, 0x22),
/* 3 **/ KEYBT(0x33, 0x2a),
/* 4 ç*/ KEYBT(0x34, 0xe7),
/* 5 %*/ KEYBT(0x35, 0x25),
/* 6 &*/ KEYBT(0x36, 0x26),
/* 7 /*/ KEYBT(0x37, 0x2f),
/* 8 (*/ KEYBT(0x38, 0x28),
/* 9 )*/ KEYBT(0x39, 0x29),
/* 0 =*/ KEYBT(0x30, 0x3d),
/* ' ?*/ KEYBT(0x27, 0x5f),
/* ^ `*/ KEYBT(0x5e, 0x60),
/* q Q*/ KEYBT(0x71, 0x51),
/* w W*/ KEYBT(0x77, 0x57),
/* e E*/ KEYBT(0x65, 0x45),
/* r R*/ KEYBT(0x72, 0x52),
/* t T*/ KEYBT(0x74, 0x54),
/* z Z*/ KEYBT(0x7a, 0x5a),
/* u U*/ KEYBT(0x75, 0x55),
/* i I*/ KEYBT(0x69, 0x49),
/* o O*/ KEYBT(0x6f, 0x4f),
/* p P*/ KEYBT(0x70, 0x50),
/* è ü*/ KEYBT(0xe8, 0xfa),
/* ¨ !*/ KEYBT(0xa8 ,0x21),
/* a A*/ KEYBT(0x61, 0x41),
/* s S*/ KEYBT(0x73, 0x53),
/* d D*/ KEYBT(0x64, 0x44),
/* f F*/ KEYBT(0x66, 0x46),
/* g G*/ KEYBT(0x67, 0x47),
/* h H*/ KEYBT(0x68, 0x48),
/* j J*/ KEYBT(0x6a, 0x4a),
/* k K*/ KEYBT(0x6b, 0x4b),
/* l L*/ KEYBT(0x6c, 0x4c),
/* é ö*/ KEYBT(0xe9, 0xf6),
/* à ä*/ KEYBT(0xe0, 0xe4),
/* $ £*/ KEYBT(0x24, 0xa3),
/* < >*/ KEYBT(0x3c, 0x3e),
/* y Y*/ KEYBT(0x79, 0x59),
/* x X*/ KEYBT(0x78, 0x58),
/* c C*/ KEYBT(0x63, 0x43),
/* v V*/ KEYBT(0x76, 0x56),
/* b B*/ KEYBT(0x62, 0x42),
/* n N*/ KEYBT(0x6e, 0x4e),
/* m M*/ KEYBT(0x6d, 0x4d),
/* , ;*/ KEYBT(0x2c, 0x3b),
/* . :*/ KEYBT(0x2e, 0x3a),
/* - _*/ KEYBT(0x2d, 0x5f)};
const KEYBT GERMAN_LOCALE[] = {
/* ^ ? */ KEYBT(0x5f, 0xb0),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 " */ KEYBT(0x32, 0x22),
/* 3 */ KEYBT(0x33, 0xa7),
/* 4 $ */ KEYBT(0x34, 0x24),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 & */ KEYBT(0x36, 0x26),
/* 7 / */ KEYBT(0x37, 0x2f),
/* 8 ( */ KEYBT(0x38, 0x28),
/* 9 ) */ KEYBT(0x39, 0x29),
/* 0 = */ KEYBT(0x30, 0x3d),
/* ? ? */ KEYBT(0xdf, 0x3f),
/* ` ? */ KEYBT(0x60, 0xb4),
/* q Q */ KEYBT(0x71, 0x51),
/* w W */ KEYBT(0x77, 0x57),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* z Z */ KEYBT(0x7a, 0x5a),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* ? ? */ KEYBT(0xfc, 0xdc),
/* + * */ KEYBT(0x2b, 0x2a),
/* a A */ KEYBT(0x61, 0x41),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* ? ? */ KEYBT(0xf6, 0xd6),
/* ? ? */ KEYBT(0xe4, 0xc4),
/* ' # */ KEYBT(0x27, 0x23),
/* y Y */ KEYBT(0x79, 0x59),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* m M */ KEYBT(0x6d, 0x4d),
/* , ; */ KEYBT(0x2c, 0x3b),
/* . : */ KEYBT(0x2e, 0x3a),
/* _ - */ KEYBT(0x5f, 0x2d)};
/* ё Ё */ KEYBTDECLEX2(0x451, 0x401, true, 41, XK_Cyrillic_io, XK_Cyrillic_IO),
/* 1 ! */ KEYBTDECL(0x31, 0x21, false, 2),
/* 2 " */ KEYBTDECL(0x32, 0x5c, false, 3),
/* 3 № */ KEYBTDECLEX1(0x33, 0x2116, false, 4, 0x33, XK_numerosign),
/* 4 ; */ KEYBTDECL(0x34, 0x3b, false, 5),
/* 5 % */ KEYBTDECL(0x35, 0x25, false, 6),
/* 6 : */ KEYBTDECL(0x36, 0x3a, false, 7),
/* 7 ? */ KEYBTDECL(0x37, 0x3f, false, 8),
/* 8 * */ KEYBTDECL(0x38, 0x2a, false, 9),
/* 9 ( */ KEYBTDECL(0x39, 0x28, false, 10),
/* 0 ) */ KEYBTDECL(0x30, 0x29, false, 11),
/* - _ */ KEYBTDECL(0x2d, 0x4f, false, 12),
/* = + */ KEYBTDECL(0x3d, 0x2b, false, 13),
/* й Й */ KEYBTDECLEX2(0x439, 0x419, true, 16, XK_Cyrillic_shorti, XK_Cyrillic_SHORTI),
/* ц Ц */ KEYBTDECLEX2(0x446, 0x426, true, 17, XK_Cyrillic_tse, XK_Cyrillic_TSE),
/* у У */ KEYBTDECLEX2(0x443, 0x423, true, 18, XK_Cyrillic_u, XK_Cyrillic_U),
/* к К */ KEYBTDECLEX2(0x43a, 0x41a, true, 19, XK_Cyrillic_ka, XK_Cyrillic_KA),
/* е Е */ KEYBTDECLEX2(0x435, 0x415, true, 20, XK_Cyrillic_ie, XK_Cyrillic_IE),
/* н Н */ KEYBTDECLEX2(0x43d, 0x41d, true, 21, XK_Cyrillic_en, XK_Cyrillic_EN),
/* г Г */ KEYBTDECLEX2(0x433, 0x413, true, 22, XK_Cyrillic_ghe, XK_Cyrillic_GHE),
/* ш Ш */ KEYBTDECLEX2(0x448, 0x428, true, 23, XK_Cyrillic_sha, XK_Cyrillic_SHA),
/* щ Щ */ KEYBTDECLEX2(0x449, 0x429, true, 24, XK_Cyrillic_shcha, XK_Cyrillic_SHCHA),
/* з З */ KEYBTDECLEX2(0x437, 0x417, true, 25, XK_Cyrillic_ze, XK_Cyrillic_ZE),
/* х Х */ KEYBTDECLEX2(0x445, 0x425, true, 26, XK_Cyrillic_ha, XK_Cyrillic_HA),
/* ъ Ъ */ KEYBTDECLEX2(0x44a, 0x42a, true, 27, XK_Cyrillic_hardsign, XK_Cyrillic_HARDSIGN),
/* ф Ф */ KEYBTDECLEX2(0x444, 0x424, true, 30, XK_Cyrillic_ef, XK_Cyrillic_EF),
/* ы Ы */ KEYBTDECLEX2(0x44b, 0x42b, true, 31, XK_Cyrillic_yeru, XK_Cyrillic_YERU),
/* в В */ KEYBTDECLEX2(0x432, 0x412, true, 32, XK_Cyrillic_ve, XK_Cyrillic_VE),
/* а А */ KEYBTDECLEX2(0x430, 0x410, true, 33, XK_Cyrillic_a, XK_Cyrillic_A),
/* п П */ KEYBTDECLEX2(0x43f, 0x41f, true, 34, XK_Cyrillic_pe, XK_Cyrillic_PE),
/* р Р */ KEYBTDECLEX2(0x440, 0x420, true, 35, XK_Cyrillic_er, XK_Cyrillic_ER),
/* о О */ KEYBTDECLEX2(0x43e, 0x41e, true, 36, XK_Cyrillic_o, XK_Cyrillic_O),
/* л Л */ KEYBTDECLEX2(0x43b, 0x41b, true, 37, XK_Cyrillic_el, XK_Cyrillic_EL),
/* д Д */ KEYBTDECLEX2(0x434, 0x414, true, 38, XK_Cyrillic_de, XK_Cyrillic_DE),
/* ж Ж */ KEYBTDECLEX2(0x436, 0x416, true, 39, XK_Cyrillic_zhe, XK_Cyrillic_ZHE),
/* э Э */ KEYBTDECLEX2(0x44d, 0x42d, true, 40, XK_Cyrillic_e, XK_Cyrillic_E),
/* \ / */ KEYBTDECL(0x5c, 0x2f, false, 43),
/* я Я */ KEYBTDECLEX2(0x44f, 0x42f, true, 44, XK_Cyrillic_ya, XK_Cyrillic_YA),
/* ч Ч */ KEYBTDECLEX2(0x447, 0x427, true, 45, XK_Cyrillic_che, XK_Cyrillic_CHE),
/* с С */ KEYBTDECLEX2(0x441, 0x421, true, 46, XK_Cyrillic_es, XK_Cyrillic_ES),
/* м М */ KEYBTDECLEX2(0x43c, 0x41c, true, 47, XK_Cyrillic_em, XK_Cyrillic_EM),
/* и И */ KEYBTDECLEX2(0x438, 0x418, true, 48, XK_Cyrillic_i, XK_Cyrillic_I),
/* т Т */ KEYBTDECLEX2(0x442, 0x422, true, 49, XK_Cyrillic_te, XK_Cyrillic_TE),
/* ь Ь */ KEYBTDECLEX2(0x44c, 0x42c, true, 50, XK_Cyrillic_softsign, XK_Cyrillic_SOFTSIGN),
/* б Б */ KEYBTDECLEX2(0x431, 0x411, true, 51, XK_Cyrillic_be, XK_Cyrillic_BE),
/* ю Ю */ KEYBTDECLEX2(0x44e, 0x42e, true, 52, XK_Cyrillic_yu, XK_Cyrillic_YU),
/* . , */ KEYBTDECL(0x2e, 0x2c, false, 53)};
KEYBT GERMAN_LOCALE[] = {
/* ^ ? */ KEYBTDECL(0x5f, 0xb0, false, 41),
/* 1 ! */ KEYBTDECL(0x31, 0x21, true, 2),
/* 2 " */ KEYBTDECL(0x32, 0x22, true, 3),
/* 3 */ KEYBTDECL(0x33, 0xa7, true, 4),
/* 4 $ */ KEYBTDECL(0x34, 0x24, true, 5),
/* 5 % */ KEYBTDECL(0x35, 0x25, true, 6),
/* 6 & */ KEYBTDECL(0x36, 0x26, true, 7),
/* 7 / */ KEYBTDECL(0x37, 0x2f, true, 8),
/* 8 ( */ KEYBTDECL(0x38, 0x28, true, 9),
/* 9 ) */ KEYBTDECL(0x39, 0x29, true, 10),
/* 0 = */ KEYBTDECL(0x30, 0x3d, true, 11),
/* ? ? */ KEYBTDECL(0xdf, 0x3f, true, 12),
/* ` ? */ KEYBTDECL(0x60, 0xb4, true, 13),
/* q Q */ KEYBTDECL(0x71, 0x51, true, 16),
/* w W */ KEYBTDECL(0x77, 0x57, true, 17),
/* e E */ KEYBTDECL(0x65, 0x45, true, 18),
/* r R */ KEYBTDECL(0x72, 0x52, true, 19),
/* t T */ KEYBTDECL(0x74, 0x54, true, 20),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true, 21),
/* u U */ KEYBTDECL(0x75, 0x55, true, 22),
/* i I */ KEYBTDECL(0x69, 0x49, true, 23),
/* o O */ KEYBTDECL(0x6f, 0x4f, true, 24),
/* p P */ KEYBTDECL(0x70, 0x50, true, 25),
/* ? ? */ KEYBTDECL(0xfc, 0xdc, true, 26),
/* + * */ KEYBTDECL(0x2b, 0x2a, true, 27),
/* a A */ KEYBTDECL(0x61, 0x41, true, 30),
/* s S */ KEYBTDECL(0x73, 0x53, true, 31),
/* d D */ KEYBTDECL(0x64, 0x44, true, 32),
/* f F */ KEYBTDECL(0x66, 0x46, true, 33),
/* g G */ KEYBTDECL(0x67, 0x47, true, 34),
/* h H */ KEYBTDECL(0x68, 0x48, true, 35),
/* j J */ KEYBTDECL(0x6a, 0x4a, true, 36),
/* k K */ KEYBTDECL(0x6b, 0x4b, true, 37),
/* l L */ KEYBTDECL(0x6c, 0x4c, true, 38),
/* ? ? */ KEYBTDECL(0xf6, 0xd6, true, 39),
/* ? ? */ KEYBTDECL(0xe4, 0xc4, true, 40),
/* ' # */ KEYBTDECL(0x27, 0x23, true, 43),
/* y Y */ KEYBTDECL(0x79, 0x59, true, 44),
/* x X */ KEYBTDECL(0x78, 0x58, true, 45),
/* c C */ KEYBTDECL(0x63, 0x43, true, 46),
/* v V */ KEYBTDECL(0x76, 0x56, true, 47),
/* b B */ KEYBTDECL(0x62, 0x42, true, 48),
/* n N */ KEYBTDECL(0x6e, 0x4e, true, 49),
/* m M */ KEYBTDECL(0x6d, 0x4d, true, 50),
/* , ; */ KEYBTDECL(0x2c, 0x3b, true, 51),
/* . : */ KEYBTDECL(0x2e, 0x3a, true, 52),
/* _ - */ KEYBTDECL(0x5f, 0x2d, true, 53)};
KEYBT FRENCH_LOCALE[] = {
/* ? ? */ KEYBTDECL(0xb2, 0xb2, true, 41),
/* & 1 */ KEYBTDECL(0x26, 0x31, true, 2),
/* ? 2 */ KEYBTDECL(0xe9, 0x32, true, 3),
/* " 3 */ KEYBTDECL(0x22, 0x33, true, 4),
/* ' 4 */ KEYBTDECL(0x27, 0x34, true, 5),
/* ( 5 */ KEYBTDECL(0x28, 0x35, true, 6),
/* - 6 */ KEYBTDECL(0x2d, 0x36, true, 7),
/* ? 7 */ KEYBTDECL(0xe8, 0x37, true, 8),
/* _ 8 */ KEYBTDECL(0x5f, 0x38, true, 9),
/* ? 9 */ KEYBTDECL(0xe7, 0x39, true, 10),
/* ? 0 */ KEYBTDECL(0xe0, 0x29, true, 11),
/* ) ? */ KEYBTDECL(0x29, 0xb0, true, 12),
/* = + */ KEYBTDECL(0x3d, 0x2b, true, 13),
/* a A */ KEYBTDECLEX6(0x61, 0x41, true, 16, 0x61, 0x41, 0xe0, 0xc0, 0xe4, 0xc4),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true, 17),
/* e E */ KEYBTDECLEX6(0x65, 0x45, true, 18, 0x65, 0x45, 0xe8, 0xc8, 0xeb, 0xcb),
/* r R */ KEYBTDECL(0x72, 0x52, true, 19),
/* t T */ KEYBTDECL(0x74, 0x54, true, 20),
/* y Y */ KEYBTDECLEX6(0x79, 0x59, true, 21, 0x79, 0x59, 0, 0, 0xff, 0),
/* u U */ KEYBTDECLEX6(0x75, 0x55, true, 22, 0x75, 0x55, 0xf9, 0xd9, 0xfc, 0xdc),
/* i I */ KEYBTDECLEX6(0x69, 0x49, true, 23, 0x69, 0x49, 0xec, 0xcc, 0xef, 0xcf),
/* o O */ KEYBTDECLEX6(0x6f, 0x4f, true, 24, 0x6f, 0x4f, 0xf2, 0xd2, 0xf6, 0xd6),
/* p P */ KEYBTDECL(0x70, 0x50, true, 25),
/* ^ ? */ KEYBT(0x5e, 0xa8, true, 1, 2, KEYCODE(0x5e, 26, 0), KEYCODE(0xa8, 26, 1)),
/* $ ? } */ KEYBTDECL(0x24, 0xa3, true, 27),
/* q Q */ KEYBTDECL(0x71, 0x51, true, 30),
/* s S */ KEYBTDECL(0x73, 0x53, true, 31),
/* d D */ KEYBTDECL(0x64, 0x44, true, 32),
/* f F */ KEYBTDECL(0x66, 0x46, true, 33),
/* g G */ KEYBTDECL(0x67, 0x47, true, 34),
/* h H */ KEYBTDECL(0x68, 0x48, true, 35),
/* j J */ KEYBTDECL(0x6a, 0x4a, true, 36),
/* k K */ KEYBTDECL(0x6b, 0x4b, true, 37),
/* l L */ KEYBTDECL(0x6c, 0x4c, true, 38),
/* m M */ KEYBTDECL(0x6d, 0x4d, true, 39),
/* ? % */ KEYBTDECL(0xf9, 0x25, true, 40),
/* * ? */ KEYBTDECL(0x2a, 0xb5, true, 43),
/* w W */ KEYBTDECL(0x77, 0x57, true, 44),
/* x X */ KEYBTDECL(0x78, 0x58, true, 45),
/* c C */ KEYBTDECL(0x63, 0x43, true, 46),
/* v V */ KEYBTDECL(0x76, 0x56, true, 47),
/* b B */ KEYBTDECL(0x62, 0x42, true, 48),
/* n N */ KEYBTDECL(0x6e, 0x4e, true, 49),
/* , ? */ KEYBTDECL(0x2c, 0x3f, true, 50),
/* ; . */ KEYBTDECL(0x3b, 0x2e, true, 51),
/* : / */ KEYBTDECL(0x3a, 0x2f, true, 52),
/* ! ? */ KEYBTDECL(0x21, 0xa7, true, 53)};
KEYBT SWISS_FRENCH_LOCALE[] = {
/* § °*/ KEYBTDECL(0xa7, 0xb0, false, 41),
/* 1 +*/ KEYBTDECL(0x31, 0x2b, false, 2),
/* 2 "*/ KEYBTDECL(0x32, 0x22, false, 3),
/* 3 **/ KEYBTDECL(0x33, 0x2a, false, 4),
/* 4 ç*/ KEYBTDECL(0x34, 0xe7, false, 5),
/* 5 %*/ KEYBTDECL(0x35, 0x25, false, 6),
/* 6 &*/ KEYBTDECL(0x36, 0x26, false, 7),
/* 7 /*/ KEYBTDECL(0x37, 0x2f, false, 8),
/* 8 (*/ KEYBTDECL(0x38, 0x28, false, 9),
/* 9 )*/ KEYBTDECL(0x39, 0x29, false, 10),
/* 0 =*/ KEYBTDECL(0x30, 0x3d, false, 11),
/* ' ?*/ KEYBTDECL(0x27, 0x5f, false, 12),
/* ^ `*/ KEYBT(0x5e, 0x60, false, 1, 2, KEYCODE(0x5e, 13, 0), KEYCODE(0x60, 13, 1)),
/* q Q*/ KEYBTDECL(0x71, 0x51, true, 16),
/* w W*/ KEYBTDECL(0x77, 0x57, true, 17),
/* e E*/ KEYBTDECLEX8(0x65, 0x45, true, 18, 0x65, 0x45, 0xea, 0xca, 0xe8, 0xc8, 0xeb, 0xcb),
/* r R*/ KEYBTDECL(0x72, 0x52, true, 19),
/* t T*/ KEYBTDECL(0x74, 0x54, true, 20),
/* z Z*/ KEYBTDECL(0x7a, 0x5a, true, 21),
/* u U*/ KEYBTDECLEX8(0x75, 0x55, true, 22, 0x75, 0x55, 0xfb, 0xdb, 0xf9, 0xd9, 0xfc, 0xdc),
/* i I*/ KEYBTDECLEX8(0x69, 0x49, true, 23, 0x69, 0x49, 0xee, 0xce, 0xec, 0xcc, 0xef, 0xcf),
/* o O*/ KEYBTDECLEX8(0x6f, 0x4f, true, 24, 0x6f, 0x4f, 0xf4, 0xd4, 0xf2, 0xd2, 0xf6, 0xd6),
/* p P*/ KEYBTDECL(0x70, 0x50, true, 25),
/* è ü*/ KEYBTDECL(0xe8, 0xfa, false, 26),
/* ¨ !*/ KEYBT(0xa8, 0x21, false, 3, 0, KEYCODE(0xa8, 27, 0), KEYCODE(0x21, 27, 1)),
/* a A*/ KEYBTDECLEX8(0x61, 0x41, true, 30, 0x61, 0x41, 0xe2, 0xc2, 0xe0, 0xc0, 0xe4, 0xc4),
/* s S*/ KEYBTDECL(0x73, 0x53, true, 31),
/* d D*/ KEYBTDECL(0x64, 0x44, true, 32),
/* f F*/ KEYBTDECL(0x66, 0x46, true, 33),
/* g G*/ KEYBTDECL(0x67, 0x47, true, 34),
/* h H*/ KEYBTDECL(0x68, 0x48, true, 35),
/* j J*/ KEYBTDECL(0x6a, 0x4a, true, 36),
/* k K*/ KEYBTDECL(0x6b, 0x4b, true, 37),
/* l L*/ KEYBTDECL(0x6c, 0x4c, true, 38),
/* é ö*/ KEYBTDECL(0xe9, 0xf6, false, 39),
/* à ä*/ KEYBTDECL(0xe0, 0xe4, false, 40),
/* $ £*/ KEYBTDECL(0x24, 0xa3, false, 43),
/* < >*/ KEYBTDECL(0x3c, 0x3e, false, 44),
/* y Y*/ KEYBTDECLEX8(0x79, 0x59, true, 45, 0x79, 0x59, 0, 0, 0, 0, 0xff, 0),
/* x X*/ KEYBTDECL(0x78, 0x58, true, 46),
/* c C*/ KEYBTDECL(0x63, 0x43, true, 47),
/* v V*/ KEYBTDECL(0x76, 0x56, true, 48),
/* b B*/ KEYBTDECL(0x62, 0x42, true, 49),
/* n N*/ KEYBTDECL(0x6e, 0x4e, true, 50),
/* m M*/ KEYBTDECL(0x6d, 0x4d, true, 51),
/* , ;*/ KEYBTDECL(0x2c, 0x3b, false, 52),
/* . :*/ KEYBTDECL(0x2e, 0x3a, false, 53),
/* - _*/ KEYBTDECL(0x2d, 0x5f, false, 54)};
void UBPlatformUtils::initializeKeyboardLayouts()
{
nKeyboardLayouts = 4;
nKeyboardLayouts = 5;
keyboardLayouts = new UBKeyboardLocale*[nKeyboardLayouts];
keyboardLayouts[0] = new UBKeyboardLocale("English", "en", "", new QIcon(":/images/flags/en.png"), ENGLISH_LOCALE);
keyboardLayouts[1] = new UBKeyboardLocale("Russian", "ru", "", new QIcon(":/images/flags/ru.png"),RUSSIAN_LOCALE);
keyboardLayouts[2] = new UBKeyboardLocale("French", "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE);
keyboardLayouts[3] = new UBKeyboardLocale("Swiss French", "fr", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE);
keyboardLayouts[4] = new UBKeyboardLocale("German", "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE);
keyboardLayouts[2] = new UBKeyboardLocale("German", "de", "", new QIcon(":/images/flags/de.png"), GERMAN_LOCALE);
keyboardLayouts[3] = new UBKeyboardLocale("French", "fr", "", new QIcon(":/images/flags/fr.png"), FRENCH_LOCALE);
keyboardLayouts[4] = new UBKeyboardLocale("Swiss French", "fr", "", new QIcon(":/images/flags/fr.png"), SWISS_FRENCH_LOCALE);
}
void UBPlatformUtils::destroyKeyboardLayouts()
{
for(int i=0; i<4; i++)
for(int i=0; i<nKeyboardLayouts; i++)
delete keyboardLayouts[i];
delete [] keyboardLayouts;
keyboardLayouts = NULL;

@ -10,8 +10,12 @@
#import <Foundation/NSAutoreleasePool.h>
#import <Carbon/Carbon.h>
#import <APELite.h>
/*
// commented because Sankore crashes on Java Script. It seems to backends dependencies.
#import <WebKit/WebKit.h>
#import <AppKit/AppKit.h>
*/
NSString* bundleShortVersion(NSBundle *bundle)
@ -369,10 +373,10 @@ QPixmap qpixmapFromIconRef(IconRef iconRef, int size) {
HLock(hRawBitmapData);
unsigned long* data = (unsigned long*) *hRawBitmapData;
for (int posy=0; posy<iconSize; ++posy, data+=iconSize) {
#ifdef __BIG_ENDIAN__
#ifdef __BIG_ENDIAN__
uchar* line = image.scanLine(posy);
memcpy(line, data, iconSize * 4);
#else
#else
uchar* src = (uchar*) data;
uchar* dst = image.scanLine(posy);
for (int posx=0; posx<iconSize; src+=4, dst+=4, ++posx) {
@ -381,7 +385,7 @@ QPixmap qpixmapFromIconRef(IconRef iconRef, int size) {
dst[2] = src[1];
dst[3] = src[0];
}
#endif
#endif
}
HUnlock(hRawBitmapData);
DisposeHandle( hRawBitmapData );
@ -409,19 +413,19 @@ KEYBT* createKeyBt(const UCKeyboardLayout* keyLayout, int vkk)
UInt32 deadKeyState = 0L;
UInt32 kbdType = kKeyboardISO;
UniCharCount cnt1, cnt2;
UniChar unicodeString1[100], unicodeString2[100];
UniCharCount cnt1, cnt2, cnt3;
UniChar unicodeString1[100], unicodeString2[100], unicodeString3[100];
UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, 0, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt1, unicodeString1);
UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (shiftKey >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeString2);
UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (alphaLock >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeString3);
return new KEYBT(unicodeString1[0], vkk, unicodeString2[0], vkk);
}
return new KEYBT(unicodeString1[0], unicodeString2[0], unicodeString1[0] != unicodeString3[0], 0,0, KEYCODE(0, vkk, 0), KEYCODE(0, vkk, 1));
}
void UBPlatformUtils::initializeKeyboardLayouts()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CFStringRef keys[] = { kTISPropertyInputSourceCategory, kTISPropertyInputSourceIsEnableCapable, kTISPropertyInputSourceIsSelectCapable };
const void* values[] = { kTISCategoryKeyboardInputSource, kCFBooleanTrue, kCFBooleanTrue };
CFDictionaryRef dict = CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 3, NULL, NULL);
@ -502,7 +506,7 @@ void UBPlatformUtils::initializeKeyboardLayouts()
QString ID = QStringFromStringRef(sr);
sr = (CFStringRef) TISGetInputSourceProperty(keyLayoutRef, kTISPropertyLocalizedName);
QString fullName = QString::fromUtf8([sr UTF8String], strlen([sr UTF8String]));
QString fullName = QStringFromStringRef(sr);
CFArrayRef langs = (CFArrayRef) TISGetInputSourceProperty(keyLayoutRef, kTISPropertyInputSourceLanguages);
@ -535,7 +539,7 @@ void UBPlatformUtils::initializeKeyboardLayouts()
for(int i=0; i<nKeyboardLayouts; i++)
keyboardLayouts[i] = result[i];
}
[pool drain];
}
void UBPlatformUtils::destroyKeyboardLayouts()
@ -544,13 +548,14 @@ void UBPlatformUtils::destroyKeyboardLayouts()
QString UBPlatformUtils::urlFromClipboard()
{
QString qsRet;
/*
// commented because Sankore crashes on Java Script. It seems to backends dependencies.
NSPasteboard* pPasteboard = [NSPasteboard pasteboardWithName:@"Apple CFPasteboard drag"];
WebArchive* pArchive = [[WebArchive alloc] initWithData:[pPasteboard dataForType:@"com.apple.webarchive"]];
qsRet = [[[[pArchive mainResource] URL] absoluteString] UTF8String];
[pArchive release];
*/
return qsRet;
}

@ -128,272 +128,271 @@ void UBPlatformUtils::setWindowNonActivableFlag(QWidget* widget, bool nonAcivabl
SetWindowLong(widget->winId(), GWL_EXSTYLE, exStyle);
}
#define KEYBTDECL(s1, s2, clSwitch) KEYBT(s1, s2, clSwitch, 0, 0, KEYCODE(s1), KEYCODE(s2))
const KEYBT RUSSIAN_LOCALE [] =
KEYBT RUSSIAN_LOCALE [] =
{
/* Ј і */ KEYBT(0x451, 0x401),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 " */ KEYBT(0x32, 0x5c),
/* 3 ? */ KEYBT(0x33, 0x2116),
/* 4 ; */ KEYBT(0x34, 0x3b),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 : */ KEYBT(0x36, 0x3a),
/* 7 ? */ KEYBT(0x37, 0x3f),
/* 8 * */ KEYBT(0x38, 0x2a),
/* 9 ( */ KEYBT(0x39, 0x28),
/* 0 ) */ KEYBT(0x30, 0x29),
/* - _ */ KEYBT(0x2d, 0x4f),
/* = + */ KEYBT(0x3d, 0x2b),
/* К к */ KEYBT(0x439, 0x419),
/* Г г */ KEYBT(0x446, 0x426),
/* Х х */ KEYBT(0x443, 0x423),
/* Л л */ KEYBT(0x43a, 0x41a),
/* Е е */ KEYBT(0x435, 0x415),
/* О о */ KEYBT(0x43d, 0x41d),
/* З з */ KEYBT(0x433, 0x413),
/* Ы ы */ KEYBT(0x448, 0x428),
/* Э э */ KEYBT(0x449, 0x429),
/* Ъ ъ */ KEYBT(0x437, 0x417),
/* И и */ KEYBT(0x445, 0x425),
/* Я я */ KEYBT(0x44a, 0x42a),
/* Ж ж */ KEYBT(0x444, 0x424),
/* Щ щ */ KEYBT(0x44b, 0x42b),
/* Ч ч */ KEYBT(0x432, 0x412),
/* Б б */ KEYBT(0x430, 0x410),
/* Р р */ KEYBT(0x43f, 0x41f),
/* Т т */ KEYBT(0x440, 0x420),
/* П п */ KEYBT(0x43e, 0x41e),
/* М м */ KEYBT(0x43b, 0x41b),
/* Д д */ KEYBT(0x434, 0x414),
/* Ц ц */ KEYBT(0x436, 0x416),
/* Ь ь */ KEYBT(0x44d, 0x42d),
/* \ / */ KEYBT(0x5c, 0x2f),
/* С с */ KEYBT(0x44f, 0x42f),
/* Ю ю */ KEYBT(0x447, 0x427),
/* У у */ KEYBT(0x441, 0x421),
/* Н н */ KEYBT(0x43c, 0x41c),
/* Й й */ KEYBT(0x438, 0x418),
/* Ф ф */ KEYBT(0x442, 0x422),
/* Ш ш */ KEYBT(0x44c, 0x42c),
/* В в */ KEYBT(0x431, 0x411),
/* А а */ KEYBT(0x44e, 0x42e),
/* . , */ KEYBT(0x2e, 0x2c)};
const KEYBT ENGLISH_LOCALE[] = {
/* ` ~ */ KEYBT(0x60, 0x7e),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 @ */ KEYBT(0x32, 0x40),
/* 3 # */ KEYBT(0x33, 0x23),
/* 4 $ */ KEYBT(0x34, 0x24),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 ^ */ KEYBT(0x36, 0x5e),
/* 7 & */ KEYBT(0x37, 0x26),
/* 8 * */ KEYBT(0x38, 0x2a),
/* 9 ( */ KEYBT(0x39, 0x28),
/* 0 ) */ KEYBT(0x30, 0x29),
/* - _ */ KEYBT(0x2d, 0x5f),
/* = + */ KEYBT(0x3d, 0x2b),
/* q Q */ KEYBT(0x71, 0x51),
/* w W */ KEYBT(0x77, 0x57),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* y Y */ KEYBT(0x79, 0x59),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* [ { */ KEYBT(0x5b, 0x7b),
/* ] } */ KEYBT(0x5d, 0x7d),
/* a A */ KEYBT(0x61, 0x41),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* ; : */ KEYBT(0x3b, 0x3a),
/* ' " */ KEYBT(0x27, 0x22),
/* \ | */ KEYBT(0x5c, 0x7c),
/* z Z */ KEYBT(0x7a, 0x5a),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* m M */ KEYBT(0x6d, 0x4d),
/* , < */ KEYBT(0x2c, 0x3c),
/* . > */ KEYBT(0x2e, 0x3e),
/* / ? */ KEYBT(0x2f, 0x5f)};
const KEYBT FRENCH_LOCALE[] = {
/* ? ? */ KEYBT(0xb2, 0xb2),
/* & 1 */ KEYBT(0x26, 0x31),
/* ? 2 */ KEYBT(0xe9, 0x32),
/* " 3 */ KEYBT(0x22, 0x33),
/* ' 4 */ KEYBT(0x27, 0x34),
/* ( 5 */ KEYBT(0x28, 0x35),
/* - 6 */ KEYBT(0x2d, 0x36),
/* ? 7 */ KEYBT(0xe8, 0x37),
/* _ 8 */ KEYBT(0x5f, 0x38),
/* ? 9 */ KEYBT(0xe7, 0x39),
/* ? 0 */ KEYBT(0xe0, 0x30),
/* ) ? */ KEYBT(0x29, 0xb0),
/* = + */ KEYBT(0x3d, 0x2b),
/* a A */ KEYBT(0x61, 0x41),
/* z Z */ KEYBT(0x7a, 0x5a),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* y Y */ KEYBT(0x79, 0x59),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* ^ ? */ KEYBT(0x5e, 0xa8),
/* $ ? } */ KEYBT(0x24, 0xa3),
/* q Q */ KEYBT(0x71, 0x51),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* m M */ KEYBT(0x6d, 0x4d),
/* ? % */ KEYBT(0xf9, 0x25),
/* * ? */ KEYBT(0x2a, 0xb5),
/* w W */ KEYBT(0x77, 0x57),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* , ? */ KEYBT(0x2c, 0x3f),
/* ; . */ KEYBT(0x3b, 0x2e),
/* : / */ KEYBT(0x3a, 0x2f),
/* ! ? */ KEYBT(0x21, 0xa7)};
const KEYBT SWISS_FRENCH_LOCALE[] = {
/* § °*/ KEYBT(0xa7, 0xb0),
/* 1 +*/ KEYBT(0x31, 0x2b),
/* 2 "*/ KEYBT(0x32, 0x22),
/* 3 **/ KEYBT(0x33, 0x2a),
/* 4 ç*/ KEYBT(0x34, 0xe7),
/* 5 %*/ KEYBT(0x35, 0x25),
/* 6 &*/ KEYBT(0x36, 0x26),
/* 7 /*/ KEYBT(0x37, 0x2f),
/* 8 (*/ KEYBT(0x38, 0x28),
/* 9 )*/ KEYBT(0x39, 0x29),
/* 0 =*/ KEYBT(0x30, 0x3d),
/* ' ?*/ KEYBT(0x27, 0x5f),
/* ^ `*/ KEYBT(0x5e, 0x60),
/* q Q*/ KEYBT(0x71, 0x51),
/* w W*/ KEYBT(0x77, 0x57),
/* e E*/ KEYBT(0x65, 0x45),
/* r R*/ KEYBT(0x72, 0x52),
/* t T*/ KEYBT(0x74, 0x54),
/* z Z*/ KEYBT(0x7a, 0x5a),
/* u U*/ KEYBT(0x75, 0x55),
/* i I*/ KEYBT(0x69, 0x49),
/* o O*/ KEYBT(0x6f, 0x4f),
/* p P*/ KEYBT(0x70, 0x50),
/* è ü*/ KEYBT(0xe8, 0xfa),
/* ¨ !*/ KEYBT(0xa8 ,0x21),
/* a A*/ KEYBT(0x61, 0x41),
/* s S*/ KEYBT(0x73, 0x53),
/* d D*/ KEYBT(0x64, 0x44),
/* f F*/ KEYBT(0x66, 0x46),
/* g G*/ KEYBT(0x67, 0x47),
/* h H*/ KEYBT(0x68, 0x48),
/* j J*/ KEYBT(0x6a, 0x4a),
/* k K*/ KEYBT(0x6b, 0x4b),
/* l L*/ KEYBT(0x6c, 0x4c),
/* é ö*/ KEYBT(0xe9, 0xf6),
/* à ä*/ KEYBT(0xe0, 0xe4),
/* $ £*/ KEYBT(0x24, 0xa3),
/* < >*/ KEYBT(0x3c, 0x3e),
/* y Y*/ KEYBT(0x79, 0x59),
/* x X*/ KEYBT(0x78, 0x58),
/* c C*/ KEYBT(0x63, 0x43),
/* v V*/ KEYBT(0x76, 0x56),
/* b B*/ KEYBT(0x62, 0x42),
/* n N*/ KEYBT(0x6e, 0x4e),
/* m M*/ KEYBT(0x6d, 0x4d),
/* , ;*/ KEYBT(0x2c, 0x3b),
/* . :*/ KEYBT(0x2e, 0x3a),
/* - _*/ KEYBT(0x2d, 0x5f)};
const KEYBT GERMAN_LOCALE[] = {
/* ^ ? */ KEYBT(0x5f, 0xb0),
/* 1 ! */ KEYBT(0x31, 0x21),
/* 2 " */ KEYBT(0x32, 0x22),
/* 3 § */ KEYBT(0x33, 0xa7),
/* 4 $ */ KEYBT(0x34, 0x24),
/* 5 % */ KEYBT(0x35, 0x25),
/* 6 & */ KEYBT(0x36, 0x26),
/* 7 / */ KEYBT(0x37, 0x2f),
/* 8 ( */ KEYBT(0x38, 0x28),
/* 9 ) */ KEYBT(0x39, 0x29),
/* 0 = */ KEYBT(0x30, 0x3d),
/* ? ? */ KEYBT(0xdf, 0x3f),
/* ` ? */ KEYBT(0x60, 0xb4),
/* q Q */ KEYBT(0x71, 0x51),
/* w W */ KEYBT(0x77, 0x57),
/* e E */ KEYBT(0x65, 0x45),
/* r R */ KEYBT(0x72, 0x52),
/* t T */ KEYBT(0x74, 0x54),
/* z Z */ KEYBT(0x7a, 0x5a),
/* u U */ KEYBT(0x75, 0x55),
/* i I */ KEYBT(0x69, 0x49),
/* o O */ KEYBT(0x6f, 0x4f),
/* p P */ KEYBT(0x70, 0x50),
/* ? ? */ KEYBT(0xfc, 0xdc),
/* + * */ KEYBT(0x2b, 0x2a),
/* a A */ KEYBT(0x61, 0x41),
/* s S */ KEYBT(0x73, 0x53),
/* d D */ KEYBT(0x64, 0x44),
/* f F */ KEYBT(0x66, 0x46),
/* g G */ KEYBT(0x67, 0x47),
/* h H */ KEYBT(0x68, 0x48),
/* j J */ KEYBT(0x6a, 0x4a),
/* k K */ KEYBT(0x6b, 0x4b),
/* l L */ KEYBT(0x6c, 0x4c),
/* ? ? */ KEYBT(0xf6, 0xd6),
/* ? ? */ KEYBT(0xe4, 0xc4),
/* ' # */ KEYBT(0x27, 0x23),
/* y Y */ KEYBT(0x79, 0x59),
/* x X */ KEYBT(0x78, 0x58),
/* c C */ KEYBT(0x63, 0x43),
/* v V */ KEYBT(0x76, 0x56),
/* b B */ KEYBT(0x62, 0x42),
/* n N */ KEYBT(0x6e, 0x4e),
/* m M */ KEYBT(0x6d, 0x4d),
/* , ; */ KEYBT(0x2c, 0x3b),
/* . : */ KEYBT(0x2e, 0x3a),
/* _ - */ KEYBT(0x5f, 0x2d)};
/* Ј і */ KEYBTDECL(0x451, 0x401, true),
/* 1 ! */ KEYBTDECL(0x31, 0x21, false),
/* 2 " */ KEYBTDECL(0x32, 0x5c, false),
/* 3 ? */ KEYBTDECL(0x33, 0x2116, false),
/* 4 ; */ KEYBTDECL(0x34, 0x3b, false),
/* 5 % */ KEYBTDECL(0x35, 0x25, false),
/* 6 : */ KEYBTDECL(0x36, 0x3a, false),
/* 7 ? */ KEYBTDECL(0x37, 0x3f, false),
/* 8 * */ KEYBTDECL(0x38, 0x2a, false),
/* 9 ( */ KEYBTDECL(0x39, 0x28, false),
/* 0 ) */ KEYBTDECL(0x30, 0x29, false),
/* - _ */ KEYBTDECL(0x2d, 0x4f, false),
/* = + */ KEYBTDECL(0x3d, 0x2b, false),
/* К к */ KEYBTDECL(0x439, 0x419, true),
/* Г г */ KEYBTDECL(0x446, 0x426, true),
/* Х х */ KEYBTDECL(0x443, 0x423, true),
/* Л л */ KEYBTDECL(0x43a, 0x41a, true),
/* Е е */ KEYBTDECL(0x435, 0x415, true),
/* О о */ KEYBTDECL(0x43d, 0x41d, true),
/* З з */ KEYBTDECL(0x433, 0x413, true),
/* Ы ы */ KEYBTDECL(0x448, 0x428, true),
/* Э э */ KEYBTDECL(0x449, 0x429, true),
/* Ъ ъ */ KEYBTDECL(0x437, 0x417, true),
/* И и */ KEYBTDECL(0x445, 0x425, true),
/* Я я */ KEYBTDECL(0x44a, 0x42a, true),
/* Ж ж */ KEYBTDECL(0x444, 0x424, true),
/* Щ щ */ KEYBTDECL(0x44b, 0x42b, true),
/* Ч ч */ KEYBTDECL(0x432, 0x412, true),
/* Б б */ KEYBTDECL(0x430, 0x410, true),
/* Р р */ KEYBTDECL(0x43f, 0x41f, true),
/* Т т */ KEYBTDECL(0x440, 0x420, true),
/* П п */ KEYBTDECL(0x43e, 0x41e, true),
/* М м */ KEYBTDECL(0x43b, 0x41b, true),
/* Д д */ KEYBTDECL(0x434, 0x414, true),
/* Ц ц */ KEYBTDECL(0x436, 0x416, true),
/* Ь ь */ KEYBTDECL(0x44d, 0x42d, true),
/* \ / */ KEYBTDECL(0x5c, 0x2f, false),
/* С с */ KEYBTDECL(0x44f, 0x42f, true),
/* Ю ю */ KEYBTDECL(0x447, 0x427, true),
/* У у */ KEYBTDECL(0x441, 0x421, true),
/* Н н */ KEYBTDECL(0x43c, 0x41c, true),
/* Й й */ KEYBTDECL(0x438, 0x418, true),
/* Ф ф */ KEYBTDECL(0x442, 0x422, true),
/* Ш ш */ KEYBTDECL(0x44c, 0x42c, true),
/* В в */ KEYBTDECL(0x431, 0x411, true),
/* А а */ KEYBTDECL(0x44e, 0x42e, true),
/* . , */ KEYBTDECL(0x2e, 0x2c, false)};
KEYBT ENGLISH_LOCALE[] = {
/* ` ~ */ KEYBTDECL(0x60, 0x7e, false),
/* 1 ! */ KEYBTDECL(0x31, 0x21, false),
/* 2 @ */ KEYBTDECL(0x32, 0x40, false),
/* 3 # */ KEYBTDECL(0x33, 0x23, false),
/* 4 $ */ KEYBTDECL(0x34, 0x24, false),
/* 5 % */ KEYBTDECL(0x35, 0x25, false),
/* 6 ^ */ KEYBTDECL(0x36, 0x5e, false),
/* 7 & */ KEYBTDECL(0x37, 0x26, false),
/* 8 * */ KEYBTDECL(0x38, 0x2a, false),
/* 9 ( */ KEYBTDECL(0x39, 0x28, false),
/* 0 ) */ KEYBTDECL(0x30, 0x29, false),
/* - _ */ KEYBTDECL(0x2d, 0x5f, false),
/* = + */ KEYBTDECL(0x3d, 0x2b, false),
/* q Q */ KEYBTDECL(0x71, 0x51, true),
/* w W */ KEYBTDECL(0x77, 0x57, true),
/* e E */ KEYBTDECL(0x65, 0x45, true),
/* r R */ KEYBTDECL(0x72, 0x52, true),
/* t T */ KEYBTDECL(0x74, 0x54, true),
/* y Y */ KEYBTDECL(0x79, 0x59, true),
/* u U */ KEYBTDECL(0x75, 0x55, true),
/* i I */ KEYBTDECL(0x69, 0x49, true),
/* o O */ KEYBTDECL(0x6f, 0x4f, true),
/* p P */ KEYBTDECL(0x70, 0x50, true),
/* [ { */ KEYBTDECL(0x5b, 0x7b, false),
/* ] } */ KEYBTDECL(0x5d, 0x7d, false),
/* a A */ KEYBTDECL(0x61, 0x41, true),
/* s S */ KEYBTDECL(0x73, 0x53, true),
/* d D */ KEYBTDECL(0x64, 0x44, true),
/* f F */ KEYBTDECL(0x66, 0x46, true),
/* g G */ KEYBTDECL(0x67, 0x47, true),
/* h H */ KEYBTDECL(0x68, 0x48, true),
/* j J */ KEYBTDECL(0x6a, 0x4a, true),
/* k K */ KEYBTDECL(0x6b, 0x4b, true),
/* l L */ KEYBTDECL(0x6c, 0x4c, true),
/* ; : */ KEYBTDECL(0x3b, 0x3a, false),
/* ' " */ KEYBTDECL(0x27, 0x22, false),
/* \ | */ KEYBTDECL(0x5c, 0x7c, false),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true),
/* x X */ KEYBTDECL(0x78, 0x58, true),
/* c C */ KEYBTDECL(0x63, 0x43, true),
/* v V */ KEYBTDECL(0x76, 0x56, true),
/* b B */ KEYBTDECL(0x62, 0x42, true),
/* n N */ KEYBTDECL(0x6e, 0x4e, true),
/* m M */ KEYBTDECL(0x6d, 0x4d, true),
/* , < */ KEYBTDECL(0x2c, 0x3c, false),
/* . > */ KEYBTDECL(0x2e, 0x3e, false),
/* / ? */ KEYBTDECL(0x2f, 0x5f, false)};
KEYBT FRENCH_LOCALE[] = {
/* ? ? */ KEYBTDECL(0xb2, 0xb2, true),
/* & 1 */ KEYBTDECL(0x26, 0x31, true),
/* ? 2 */ KEYBTDECL(0xe9, 0x32, true),
/* " 3 */ KEYBTDECL(0x22, 0x33, true),
/* ' 4 */ KEYBTDECL(0x27, 0x34, true),
/* ( 5 */ KEYBTDECL(0x28, 0x35, true),
/* - 6 */ KEYBTDECL(0x2d, 0x36, true),
/* ? 7 */ KEYBTDECL(0xe8, 0x37, true),
/* _ 8 */ KEYBTDECL(0x5f, 0x38, true),
/* ? 9 */ KEYBTDECL(0xe7, 0x39, true),
/* ? 0 */ KEYBTDECL(0xe0, 0x29, true),
/* ) ? */ KEYBTDECL(0x29, 0xb0, true),
/* = + */ KEYBTDECL(0x3d, 0x2b, true),
/* a A */ KEYBT(0x61, 0x41, true, 0, 0, 0x61, 0x41, 0xe0, 0xc0, 0xe4, 0xc4),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true),
/* e E */ KEYBT(0x65, 0x45, true, 0, 0, 0x65, 0x45, 0xe8, 0xc8, 0xeb, 0xcb),
/* r R */ KEYBTDECL(0x72, 0x52, true),
/* t T */ KEYBTDECL(0x74, 0x54, true),
/* y Y */ KEYBT(0x79, 0x59, true, 0, 0, 0x79, 0x59, 0, 0, 0xff),
/* u U */ KEYBT(0x75, 0x55, true, 0, 0, 0x75, 0x55, 0xf9, 0xd9, 0xfc, 0xdc),
/* i I */ KEYBT(0x69, 0x49, true, 0, 0, 0x69, 0x49, 0xec, 0xcc, 0xef, 0xcf),
/* o O */ KEYBT(0x6f, 0x4f, true, 0, 0, 0x6f, 0x4f, 0xf2, 0xd2, 0xf6, 0xd6),
/* p P */ KEYBTDECL(0x70, 0x50, true),
/* ^ ? */ KEYBT(0x5e, 0xa8, true, 1, 2, 0x5e, 0xa8),
/* $ ? } */ KEYBTDECL(0x24, 0xa3, true),
/* q Q */ KEYBTDECL(0x71, 0x51, true),
/* s S */ KEYBTDECL(0x73, 0x53, true),
/* d D */ KEYBTDECL(0x64, 0x44, true),
/* f F */ KEYBTDECL(0x66, 0x46, true),
/* g G */ KEYBTDECL(0x67, 0x47, true),
/* h H */ KEYBTDECL(0x68, 0x48, true),
/* j J */ KEYBTDECL(0x6a, 0x4a, true),
/* k K */ KEYBTDECL(0x6b, 0x4b, true),
/* l L */ KEYBTDECL(0x6c, 0x4c, true),
/* m M */ KEYBTDECL(0x6d, 0x4d, true),
/* ? % */ KEYBTDECL(0xf9, 0x25, true),
/* * ? */ KEYBTDECL(0x2a, 0xb5, true),
/* w W */ KEYBTDECL(0x77, 0x57, true),
/* x X */ KEYBTDECL(0x78, 0x58, true),
/* c C */ KEYBTDECL(0x63, 0x43, true),
/* v V */ KEYBTDECL(0x76, 0x56, true),
/* b B */ KEYBTDECL(0x62, 0x42, true),
/* n N */ KEYBTDECL(0x6e, 0x4e, true),
/* , ? */ KEYBTDECL(0x2c, 0x3f, true),
/* ; . */ KEYBTDECL(0x3b, 0x2e, true),
/* : / */ KEYBTDECL(0x3a, 0x2f, true),
/* ! ? */ KEYBTDECL(0x21, 0xa7, true)};
KEYBT SWISS_FRENCH_LOCALE[] = {
/* § °*/ KEYBTDECL(0xa7, 0xb0, false),
/* 1 +*/ KEYBTDECL(0x31, 0x2b, false),
/* 2 "*/ KEYBTDECL(0x32, 0x22, false),
/* 3 **/ KEYBTDECL(0x33, 0x2a, false),
/* 4 ç*/ KEYBTDECL(0x34, 0xe7, false),
/* 5 %*/ KEYBTDECL(0x35, 0x25, false),
/* 6 &*/ KEYBTDECL(0x36, 0x26, false),
/* 7 /*/ KEYBTDECL(0x37, 0x2f, false),
/* 8 (*/ KEYBTDECL(0x38, 0x28, false),
/* 9 )*/ KEYBTDECL(0x39, 0x29, false),
/* 0 =*/ KEYBTDECL(0x30, 0x3d, false),
/* ' ?*/ KEYBTDECL(0x27, 0x5f, false),
/* ^ `*/ KEYBT(0x5e, 0x60, false, 1, 2, 0x5e, 0x60),
/* q Q*/ KEYBTDECL(0x71, 0x51, true),
/* w W*/ KEYBTDECL(0x77, 0x57, true),
/* e E*/ KEYBT(0x65, 0x45, true, 0, 0, 0x65, 0x45, 0xea, 0xca, 0xe8, 0xc8, 0xeb, 0xcb),
/* r R*/ KEYBTDECL(0x72, 0x52, true),
/* t T*/ KEYBTDECL(0x74, 0x54, true),
/* z Z*/ KEYBTDECL(0x7a, 0x5a, true),
/* u U*/ KEYBT(0x75, 0x55, true, 0, 0, 0x75, 0x55, 0xfb, 0xdb, 0xf9, 0xd9, 0xfc, 0xdc),
/* i I*/ KEYBT(0x69, 0x49, true, 0, 0, 0x69, 0x49, 0xee, 0xce, 0xec, 0xcc, 0xef, 0xcf),
/* o O*/ KEYBT(0x6f, 0x4f, true, 0, 0, 0x6f, 0x4f, 0xf4, 0xd4, 0xf2, 0xd2, 0xf6, 0xd6),
/* p P*/ KEYBTDECL(0x70, 0x50, true),
/* è ü*/ KEYBTDECL(0xe8, 0xfa, false),
/* ¨ !*/ KEYBT(0xa8, 0x21, false, 3, 0, 0xa8, 0x21),
/* a A*/ KEYBT(0x61, 0x41, true, 0, 0, 0x61, 0x41, 0xe2, 0xc2, 0xe0, 0xc0, 0xe4, 0xc4),
/* s S*/ KEYBTDECL(0x73, 0x53, true),
/* d D*/ KEYBTDECL(0x64, 0x44, true),
/* f F*/ KEYBTDECL(0x66, 0x46, true),
/* g G*/ KEYBTDECL(0x67, 0x47, true),
/* h H*/ KEYBTDECL(0x68, 0x48, true),
/* j J*/ KEYBTDECL(0x6a, 0x4a, true),
/* k K*/ KEYBTDECL(0x6b, 0x4b, true),
/* l L*/ KEYBTDECL(0x6c, 0x4c, true),
/* é ö*/ KEYBTDECL(0xe9, 0xf6, false),
/* à ä*/ KEYBTDECL(0xe0, 0xe4, false),
/* $ £*/ KEYBTDECL(0x24, 0xa3, false),
/* < >*/ KEYBTDECL(0x3c, 0x3e, false),
/* y Y*/ KEYBT(0x79, 0x59, true, 0, 0, 0x79, 0x59, 0, 0, 0, 0, 0xff),
/* x X*/ KEYBTDECL(0x78, 0x58, true),
/* c C*/ KEYBTDECL(0x63, 0x43, true),
/* v V*/ KEYBTDECL(0x76, 0x56, true),
/* b B*/ KEYBTDECL(0x62, 0x42, true),
/* n N*/ KEYBTDECL(0x6e, 0x4e, true),
/* m M*/ KEYBTDECL(0x6d, 0x4d, true),
/* , ;*/ KEYBTDECL(0x2c, 0x3b, false),
/* . :*/ KEYBTDECL(0x2e, 0x3a, false),
/* - _*/ KEYBTDECL(0x2d, 0x5f, false)};
KEYBT GERMAN_LOCALE[] = {
/* ^ ? */ KEYBTDECL(0x5f, 0xb0, false),
/* 1 ! */ KEYBTDECL(0x31, 0x21, true),
/* 2 " */ KEYBTDECL(0x32, 0x22, true),
/* 3 § */ KEYBTDECL(0x33, 0xa7, true),
/* 4 $ */ KEYBTDECL(0x34, 0x24, true),
/* 5 % */ KEYBTDECL(0x35, 0x25, true),
/* 6 & */ KEYBTDECL(0x36, 0x26, true),
/* 7 / */ KEYBTDECL(0x37, 0x2f, true),
/* 8 ( */ KEYBTDECL(0x38, 0x28, true),
/* 9 ) */ KEYBTDECL(0x39, 0x29, true),
/* 0 = */ KEYBTDECL(0x30, 0x3d, true),
/* ? ? */ KEYBTDECL(0xdf, 0x3f, true),
/* ` ? */ KEYBTDECL(0x60, 0xb4, false),
/* q Q */ KEYBTDECL(0x71, 0x51, true),
/* w W */ KEYBTDECL(0x77, 0x57, true),
/* e E */ KEYBTDECL(0x65, 0x45, true),
/* r R */ KEYBTDECL(0x72, 0x52, true),
/* t T */ KEYBTDECL(0x74, 0x54, true),
/* z Z */ KEYBTDECL(0x7a, 0x5a, true),
/* u U */ KEYBTDECL(0x75, 0x55, true),
/* i I */ KEYBTDECL(0x69, 0x49, true),
/* o O */ KEYBTDECL(0x6f, 0x4f, true),
/* p P */ KEYBTDECL(0x70, 0x50, true),
/* ? ? */ KEYBTDECL(0xfc, 0xdc, true),
/* + * */ KEYBTDECL(0x2b, 0x2a, true),
/* a A */ KEYBTDECL(0x61, 0x41, true),
/* s S */ KEYBTDECL(0x73, 0x53, true),
/* d D */ KEYBTDECL(0x64, 0x44, true),
/* f F */ KEYBTDECL(0x66, 0x46, true),
/* g G */ KEYBTDECL(0x67, 0x47, true),
/* h H */ KEYBTDECL(0x68, 0x48, true),
/* j J */ KEYBTDECL(0x6a, 0x4a, true),
/* k K */ KEYBTDECL(0x6b, 0x4b, true),
/* l L */ KEYBTDECL(0x6c, 0x4c, true),
/* ? ? */ KEYBTDECL(0xf6, 0xd6, true),
/* ? ? */ KEYBTDECL(0xe4, 0xc4, true),
/* ' # */ KEYBTDECL(0x27, 0x23, true),
/* y Y */ KEYBTDECL(0x79, 0x59, true),
/* x X */ KEYBTDECL(0x78, 0x58, true),
/* c C */ KEYBTDECL(0x63, 0x43, true),
/* v V */ KEYBTDECL(0x76, 0x56, true),
/* b B */ KEYBTDECL(0x62, 0x42, true),
/* n N */ KEYBTDECL(0x6e, 0x4e, true),
/* m M */ KEYBTDECL(0x6d, 0x4d, true),
/* , ; */ KEYBTDECL(0x2c, 0x3b, true),
/* . : */ KEYBTDECL(0x2e, 0x3a, true),
/* _ - */ KEYBTDECL(0x5f, 0x2d, false)};
void UBPlatformUtils::initializeKeyboardLayouts()
{

@ -38,11 +38,16 @@ UBKeyboardPalette::UBKeyboardPalette(QWidget *parent)
setGrip(false);
capsLock = false;
shift = false;
languagePopupActive = false;
keyboardActive = false;
nSpecialModifierIndex = 0;
specialModifier = 0;
btnWidth = btnHeight = 16;
strSize = "16x16";
currBtnImages = new BTNImages("16", btnWidth, btnHeight);
storage = NULL;
buttons = new UBKeyButton*[47];
for (int i=0; i<47; i++)
@ -143,6 +148,8 @@ UBKeyboardPalette::~UBKeyboardPalette()
delete currBtnImages;
currBtnImages = NULL;
}
onActivated(false);
}
QSize UBKeyboardPalette::sizeHint () const
@ -302,8 +309,10 @@ void UBKeyboardPalette::paintEvent( QPaintEvent* event)
//-------------------
// // Row 3 Stub
// ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth, btnHeight);
// offX += btnWidth;
// button Enter
ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 1, btnHeight);
offX += btnWidth*1;
// buttons [a]..[\]
for (int i = 0; i < 12; i++)
@ -313,8 +322,8 @@ void UBKeyboardPalette::paintEvent( QPaintEvent* event)
}
// button Enter
ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 3, btnHeight);
offX += btnWidth*3;
ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
offX += btnWidth*2;
//------------------------------------------------
// set geometry (position) for row 4
@ -353,6 +362,11 @@ void UBKeyboardPalette::paintEvent( QPaintEvent* event)
//------------------------------------------------
}
void UBKeyboardPalette::onDeactivated()
{
onActivated(false);
}
//-----------------------------------------------------------------------//
// BTNImages Class
@ -415,6 +429,11 @@ UBKeyboardButton::~UBKeyboardButton()
}
}
bool UBKeyboardButton::isPressed()
{
return bPressed;
}
void UBKeyboardButton::paintEvent(QPaintEvent*)
{
@ -437,7 +456,7 @@ void UBKeyboardButton::paintEvent(QPaintEvent*)
//--------------------------
if (bPressed)
if (isPressed())
{
painter.drawImage( 0,0, m_parent->currBtnImages->m_btnLeftActive, 0,0, m_parent->currBtnImages->m_btnLeftActive.width(), m_parent->currBtnImages->m_btnLeftActive.height() );
painter.drawImage( QRect(m_parent->currBtnImages->m_btnLeftActive.width(), 0, width() - m_parent->currBtnImages->m_btnLeftActive.width() - m_parent->currBtnImages->m_btnRightActive.width(), height()), m_parent->currBtnImages->m_btnCenterActive );
@ -492,10 +511,55 @@ UBKeyButton::UBKeyButton(UBKeyboardPalette* parent)
UBKeyButton::~UBKeyButton()
{}
bool UBKeyButton::shifted()
{
bool b = keyboard->shift;
if (keybt->capsLockSwitch && keyboard->capsLock)
b = !b;
return b;
}
void UBKeyButton::onPress()
{
if (keybt!=NULL)
sendUnicodeSymbol(keybt->code1, keybt->code2, capsLock());
{
int codeIndex = keyboard->nSpecialModifierIndex * 2 + shifted();
if (keyboard->nSpecialModifierIndex)
{
if (keybt->codes[codeIndex].empty())
{
sendUnicodeSymbol(keyboard->specialModifier);
sendUnicodeSymbol(keybt->codes[shifted()]);
}
else
{
sendUnicodeSymbol(keybt->codes[codeIndex]);
}
keyboard->nSpecialModifierIndex = 0;
}
else
{
int nSpecialModifierIndex = shifted()? keybt->modifier2 : keybt->modifier1;
if (nSpecialModifierIndex)
{
keyboard->nSpecialModifierIndex = nSpecialModifierIndex;
keyboard->specialModifier = keybt->codes[codeIndex];
}
else
{
sendUnicodeSymbol(keybt->codes[codeIndex]);
}
}
}
if (keyboard->shift)
{
keyboard->shift = false;
keyboard->update();
}
}
void UBKeyButton::onRelease()
@ -505,7 +569,7 @@ void UBKeyButton::paintContent(QPainter& painter)
{
if (keybt)
{
QString text(QChar(capsLock() ? keybt->symbol2 : keybt->symbol1));
QString text(QChar(shifted() ? keybt->symbol2 : keybt->symbol1));
QRect textRect(rect().x()+2, rect().y()+2, rect().width()-4, rect().height()-4);
painter.drawText(textRect, Qt::AlignCenter, text);
}
@ -565,6 +629,11 @@ void UBCapsLockButton::onPress()
void UBCapsLockButton::onRelease()
{}
bool UBCapsLockButton::isPressed()
{
return keyboard->capsLock;
}
void UBCapsLockButton::paintContent(QPainter& painter)
{
if(imgContent != NULL)
@ -576,6 +645,40 @@ void UBCapsLockButton::paintContent(QPainter& painter)
painter.drawText(rect(), Qt::AlignCenter, "^");
}
UBShiftButton::UBShiftButton(UBKeyboardPalette* parent, const QString _contentImagePath)
:UBKeyboardButton(parent, _contentImagePath)
{}
UBShiftButton::~UBShiftButton()
{}
void UBShiftButton::onPress()
{
keyboard->shift = !keyboard->shift;
keyboard->update();
}
void UBShiftButton::onRelease()
{}
bool UBShiftButton::isPressed()
{
return keyboard->shift;
}
void UBShiftButton::paintContent(QPainter& painter)
{
if(imgContent != NULL)
{
painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
}
else
painter.drawText(rect(), Qt::AlignCenter, "^");
}
UBLocaleButton::UBLocaleButton(UBKeyboardPalette* parent)
:UBKeyboardButton(parent)

@ -64,7 +64,9 @@ class UBKeyboardPalette : public UBActionPalette
friend class UBKeyboardButton;
friend class UBCapsLockButton;
friend class UBShiftButton;
friend class UBLocaleButton;
friend class UBKeyButton;
public:
UBKeyboardPalette(QWidget *parent);
@ -97,10 +99,14 @@ private slots:
protected:
bool capsLock;
bool shift;
int nCurrentLocale;
int nLocalesCount;
UBKeyboardLocale** locales;
int nSpecialModifierIndex;
KEYCODE specialModifier;
QString strSize;
int btnWidth;
int btnHeight;
@ -113,7 +119,7 @@ protected:
virtual void paintEvent(QPaintEvent *event);
virtual void moveEvent ( QMoveEvent * event );
void sendKeyEvent(const KEYBT& keybt);
void sendKeyEvent(KEYCODE keyCode);
void setLocale(int nLocale);
@ -170,11 +176,11 @@ protected:
virtual void onRelease() = 0;
virtual void paintContent(QPainter& painter) = 0;
bool capsLock(){return keyboard->capsLock;}
virtual bool isPressed();
UBKeyboardPalette* keyboard;
void sendUnicodeSymbol(unsigned int nSymbol1, unsigned int nSymbol2, bool shift);
void sendUnicodeSymbol(KEYCODE keycode);
void sendControlSymbol(int nSymbol);
private:
@ -197,6 +203,7 @@ public:
virtual void paintContent(QPainter& painter);
private:
bool shifted();
const KEYBT* keybt;
};
@ -229,8 +236,28 @@ public:
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
protected:
virtual bool isPressed();
};
class UBShiftButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBShiftButton(UBKeyboardPalette* parent, const QString _contentImagePath);
~UBShiftButton();
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
protected:
virtual bool isPressed();
};
class UBLocaleButton : public UBKeyboardButton
{
Q_OBJECT

@ -70,22 +70,61 @@ void x11SendKey(Display *display, int keyCode, int modifiers)
// Send a fake key release event to the window.
event = createKeyEvent(display, winFocus, winRoot, false, keyCode, modifiers);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
}
void UBKeyboardButton::sendUnicodeSymbol(unsigned int nSymbol1, unsigned int nSymbol2, bool shift)
/*
void traceKeyCodes()
{
unsigned int nSymbol = shift ? nSymbol2 : nSymbol1;
Display *display = XOpenDisplay(0);
if(display == NULL)
return;
int min_keycodes, max_keycodes, byte_per_code;
XDisplayKeycodes(display, &min_keycodes, &max_keycodes);
KeySym* keySyms = XGetKeyboardMapping(display, min_keycodes,
max_keycodes - min_keycodes, &byte_per_code);
qDebug() << "Codes table, min_keycodes: " << min_keycodes << ", max_keycodes: "
<< max_keycodes << ", bytes_per_code:" << byte_per_code;
for(int i=0; i<max_keycodes - min_keycodes; i++)
{
QString str;
for(int j=0; j<byte_per_code;j++)
{
str += QString::number(keySyms[i*byte_per_code + j], 16);
str += ":";
}
qDebug() << i << ":" << str;
}
XFree(keySyms);
XCloseDisplay(display);
}
*/
void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
{
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return;
KeyCode keyCode = XKeysymToKeycode(display, nSymbol);
if (keyCode != NoSymbol)
if (!keycode.empty())
{
x11SendKey(display, keyCode, shift);
int modifier = keycode.modifier;
if (keycode.modifier==2) modifier = 0x2000;
if (keycode.modifier==3) modifier = 0x2001;
if (keycode.modifier==4) modifier = 0x4000;
if (keycode.modifier==5) modifier = 0x4001;
//modifiers 6 and 7 seems are not available.... They are reassigned in layout creationtime
//if (keycode.modifier==6) modifier = 0x6000;
//if (keycode.modifier==7) modifier = 0x6001;
x11SendKey(display, keycode.code + keyboard->min_keycodes , modifier);
}
XCloseDisplay(display);
@ -111,16 +150,17 @@ void UBKeyboardButton::sendControlSymbol(int nSymbol)
void UBKeyboardPalette::createCtrlButtons()
{
ctrlButtons = new UBKeyboardButton*[8];
ctrlButtons[0] = new UBCntrlButton(this, "<-", XK_BackSpace);
ctrlButtons[1] = new UBCntrlButton(this, "<->", XK_Tab);
ctrlButtons[2] = new UBCntrlButton(this, tr("Enter"), XK_Return);
ctrlButtons[3] = new UBCapsLockButton(this, "capslock");
ctrlButtons[4] = new UBCapsLockButton(this, "capslock");
ctrlButtons[5] = new UBLocaleButton(this);
ctrlButtons[6] = new UBCntrlButton(this, "", XK_space);
ctrlButtons[7] = new UBLocaleButton(this);
ctrlButtons = new UBKeyboardButton*[9];
ctrlButtons[0] = new UBCntrlButton(this, XK_BackSpace, "backspace");
ctrlButtons[1] = new UBCntrlButton(this, XK_Tab, "tab");
ctrlButtons[2] = new UBCapsLockButton(this, "capslock");
ctrlButtons[3] = new UBCntrlButton(this, tr("Enter"), XK_Return);
ctrlButtons[4] = new UBShiftButton(this, "shift");
ctrlButtons[5] = new UBShiftButton(this, "shift");
ctrlButtons[6] = new UBLocaleButton(this);
ctrlButtons[7] = new UBCntrlButton(this, "", XK_space);
ctrlButtons[8] = new UBLocaleButton(this);
}
@ -128,90 +168,106 @@ void UBKeyboardPalette::onActivated(bool activated)
{
if (activated)
{
if (storage)
{
qDebug() << "Keybard already activated....";
return;
}
Display *display = XOpenDisplay(0);
if(display == NULL)
return;
XDisplayKeycodes(display, &this->min_keycodes, &this->max_keycodes);
KeySym* keySyms = XGetKeyboardMapping(display, min_keycodes,
max_keycodes - min_keycodes, &this->byte_per_code);
max_keycodes - min_keycodes, &byte_per_code);
storage = keySyms;
XCloseDisplay(display);
onLocaleChanged(locales[nCurrentLocale]);
}
else
{
Display *display = XOpenDisplay(0);
if(display == NULL)
{
qDebug() << "Keybard not activated....";
return;
}
KeySym* keySyms = (KeySym*)storage;
if (keySyms!=NULL)
{
qDebug() << "Default key table restored.....";
XChangeKeyboardMapping(display, min_keycodes, byte_per_code,
keySyms, max_keycodes - min_keycodes);
XFree(keySyms);
storage = NULL;
}
XCloseDisplay(display);
}
}
void UBKeyboardPalette::onDeactivated()
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale)
{
Display *display = XOpenDisplay(0);
if(display == NULL)
return;
KeySym* keySyms = (KeySym*)storage;
if (keySyms!=NULL) {
XChangeKeyboardMapping(display, min_keycodes, byte_per_code,
keySyms, max_keycodes - min_keycodes);
}
XCloseDisplay(display);
}
int byte_per_code;
KeySym* keySyms = XGetKeyboardMapping(display, min_keycodes,
max_keycodes - min_keycodes, &byte_per_code);
void setSymbolsFromButton(Display *display,
const UBKeyboardLocale& locale,
int byte_per_code,
int nFromSymbol,
int nFromButton,
int count)
{
KeySym* keySyms = new KeySym[count * byte_per_code];
for(int i = 0; i < count; i++)
for(int i=0; i<SYMBOL_KEYS_COUNT; i++)
{
// loop by keybt
for(int j=0; j<8; j++)
{
KEYCODE& kc = (*locale)[i]->codes[j];
if (!kc.empty())
{
keySyms[byte_per_code * i + 0] =
keySyms[byte_per_code * i + 2] = locale[nFromButton + i]->code1;
if (kc.modifier <= 5)
keySyms[kc.code * byte_per_code + kc.modifier] = kc.symbol;
keySyms[byte_per_code * i + 1] =
keySyms[byte_per_code * i + 3] = locale[nFromButton + i]->code2;
}
}
}
for(int j=4; j<byte_per_code; j++)
keySyms[byte_per_code * i + j] = NoSymbol;
//Now look for modifiers > 5 and reassign them to free places
for(int i=0; i<SYMBOL_KEYS_COUNT; i++)
{
// loop by keybt
for(int j=0; j<8; j++)
{
KEYCODE& kc = (*locale)[i]->codes[j];
if (!kc.empty())
{
if (kc.modifier > 5)
{
for(int i1=0; i1<SYMBOL_KEYS_COUNT; i1++)
for(int j1=0; j1<=5; j1++)
if (keySyms[i1 * byte_per_code + j1]==NoSymbol)
{
kc.code =i1;
kc.modifier =j1;
break;
}
XChangeKeyboardMapping(display, nFromSymbol, byte_per_code, keySyms, count);
delete [] keySyms;
}
}
keySyms[kc.code * byte_per_code + kc.modifier] = kc.symbol;
}
}
}
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale)
{
Display *display = XOpenDisplay(0);
if(display == NULL)
return;
setSymbolsFromButton(display, *locale, byte_per_code, min_keycodes + 41, 0, 1);
setSymbolsFromButton(display, *locale, byte_per_code, min_keycodes + 2, 1, 12);
setSymbolsFromButton(display, *locale, byte_per_code, min_keycodes + 16, 13, 12);
setSymbolsFromButton(display, *locale, byte_per_code, min_keycodes + 30, 25, 11);
setSymbolsFromButton(display, *locale, byte_per_code, min_keycodes + 44, 37, 10);
XChangeKeyboardMapping(display, min_keycodes, byte_per_code, keySyms, max_keycodes - min_keycodes);
XFree(keySyms);
XCloseDisplay(display);
}

@ -22,15 +22,13 @@
#include <QMap>
#include <QString>
void UBKeyboardButton::sendUnicodeSymbol(unsigned int nSymbol1, unsigned int nSymbol2, bool shift)
void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
{
unsigned int nSymbol = (shift)? nSymbol2 : nSymbol1;
if (shift)
if (keycode.modifier)
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 56, true));
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, nSymbol, true));
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, nSymbol, false));
if (shift)
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, keycode.code, true));
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, keycode.code, false));
if (keycode.modifier)
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 56, false));
}
@ -46,16 +44,17 @@ void UBKeyboardButton::sendControlSymbol(int nSymbol)
void UBKeyboardPalette::createCtrlButtons()
{
ctrlButtons = new UBKeyboardButton*[7];
ctrlButtons[0] = new UBCntrlButton(this, "<-", 51);
ctrlButtons[1] = new UBCntrlButton(this, "<->", 48);
ctrlButtons[2] = new UBCntrlButton(this, tr("Enter"), 76);
ctrlButtons[3] = new UBCapsLockButton(this, "capslock");
ctrlButtons[4] = new UBCapsLockButton(this, "capslock");
ctrlButtons[5] = new UBLocaleButton(this);
ctrlButtons[6] = new UBCntrlButton(this, "", 49);
ctrlButtons[7] = new UBLocaleButton(this);
ctrlButtons = new UBKeyboardButton*[9];
ctrlButtons[0] = new UBCntrlButton(this, 51, "backspace");
ctrlButtons[1] = new UBCntrlButton(this, 48, "tab");
ctrlButtons[2] = new UBCapsLockButton(this, "capslock");
ctrlButtons[3] = new UBCntrlButton(this, tr("Enter"), 76);
ctrlButtons[4] = new UBShiftButton(this, "shift");
ctrlButtons[5] = new UBShiftButton(this, "shift");
ctrlButtons[6] = new UBLocaleButton(this);
ctrlButtons[7] = new UBCntrlButton(this, "", 49);
ctrlButtons[8] = new UBLocaleButton(this);
}
void SetMacLocaleByIdentifier(const QString& id)
@ -102,10 +101,7 @@ void UBKeyboardPalette::onActivated(bool activated)
SetMacLocaleByIdentifier(activeLocale);
}
}
void UBKeyboardPalette::onDeactivated()
{
SetMacLocaleByIdentifier(activeLocale);
}
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale)
{
SetMacLocaleByIdentifier(locale->id);

@ -8,21 +8,19 @@
#include "core/memcheck.h"
void UBKeyboardButton::sendUnicodeSymbol(unsigned int nSymbol1, unsigned int nSymbol2, bool shift)
void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
{
unsigned int nSymbol = shift? nSymbol2 : nSymbol1;
INPUT input[2];
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = nSymbol;
input[0].ki.wScan = keycode.symbol;
input[0].ki.dwFlags = KEYEVENTF_UNICODE;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = 0;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = nSymbol;
input[1].ki.wScan = keycode.symbol;
input[1].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = 0;
@ -57,11 +55,10 @@ void UBKeyboardPalette::createCtrlButtons()
ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x08, "backspace");// Backspace
ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x09, "tab"); // Tab
// ctrlButtons[ctrlID++] = new UBKeyButton(this); // Row 2 Stub
// ctrlButtons[ctrlID++] = new UBKeyButton(this); // Row 3 Stub
ctrlButtons[ctrlID++] = new UBCapsLockButton(this, "capslock"); // Shift
ctrlButtons[ctrlID++] = new UBCntrlButton(this, tr("Enter"), 0x0d); // Enter
ctrlButtons[ctrlID++] = new UBCapsLockButton(this, "capslock"); // Caps Lock
ctrlButtons[ctrlID++] = new UBCapsLockButton(this, "capslock"); // Caps Lock
ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
ctrlButtons[ctrlID++] = new UBCntrlButton(this, "", 0x20); // Space
ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
@ -69,10 +66,6 @@ void UBKeyboardPalette::createCtrlButtons()
void UBKeyboardPalette::onActivated(bool)
{
}
void UBKeyboardPalette::onDeactivated()
{
}
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* )
{}

Loading…
Cancel
Save