mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-26 01:27:42 +00:00
Merge branch 'beta' into developer-add-cli-for-creating-lexical-models-fixes-2083
This commit is contained in:
commit
ead988eb7f
15 changed files with 214 additions and 153 deletions
|
|
@ -43,6 +43,8 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
private static Toolbar toolbar = null;
|
||||
private static ListView listView = null;
|
||||
private static TextView lexicalModelTextView = null;
|
||||
private static TextView correctionsTextView = null;
|
||||
private static SwitchCompat correctionsToggle = null;
|
||||
private ImageButton addButton = null;
|
||||
private String associatedLexicalModel = "";
|
||||
private String lgCode;
|
||||
|
|
@ -66,12 +68,20 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
SwitchCompat correctToggle = (SwitchCompat) v;
|
||||
// For predictions/corrections toggle
|
||||
SwitchCompat toggle = (SwitchCompat) v;
|
||||
|
||||
SharedPreferences.Editor prefEditor = prefs.edit();
|
||||
|
||||
// predictionsToggle overrides correctionToggle and correctionsTextView
|
||||
if (prefsKey.endsWith(predictionPrefSuffix)) {
|
||||
boolean override = toggle.isChecked();
|
||||
overrideCorrectionsToggle(override);
|
||||
}
|
||||
|
||||
// This will allow preemptively making settings for languages without models.
|
||||
// Seems more trouble than it's worth to block this.
|
||||
SharedPreferences.Editor prefEditor = prefs.edit();
|
||||
prefEditor.putBoolean(prefsKey, correctToggle.isChecked());
|
||||
prefEditor.putBoolean(prefsKey, toggle.isChecked());
|
||||
prefEditor.apply();
|
||||
|
||||
// Don't use/apply language modeling settings for languages without models.
|
||||
|
|
@ -136,21 +146,23 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
|
||||
RelativeLayout layout = (RelativeLayout)findViewById(R.id.corrections_toggle);
|
||||
|
||||
textView = (TextView) layout.findViewById(R.id.text1);
|
||||
textView.setText(getString(R.string.enable_corrections));
|
||||
SwitchCompat toggle = layout.findViewById(R.id.toggle);
|
||||
toggle.setChecked(mayCorrect); // Link to persistent option storage! Also needs handler.
|
||||
correctionsTextView = (TextView) layout.findViewById(R.id.text1);
|
||||
correctionsTextView.setText(getString(R.string.enable_corrections));
|
||||
correctionsToggle = layout.findViewById(R.id.toggle);
|
||||
correctionsToggle.setChecked(mayCorrect); // Link to persistent option storage! Also needs handler.
|
||||
String prefsKey = getLanguageCorrectionPreferenceKey(lgCode);
|
||||
toggle.setOnClickListener(new PreferenceToggleListener(prefsKey, lgCode));
|
||||
correctionsToggle.setOnClickListener(new PreferenceToggleListener(prefsKey, lgCode));
|
||||
|
||||
layout = (RelativeLayout)findViewById(R.id.predictions_toggle);
|
||||
|
||||
textView = (TextView) layout.findViewById(R.id.text1);
|
||||
textView.setText(getString(R.string.enable_predictions));
|
||||
toggle = layout.findViewById(R.id.toggle);
|
||||
toggle.setChecked(mayPredict); // Link to persistent option storage! Also needs handler.
|
||||
SwitchCompat predictionsToggle = layout.findViewById(R.id.toggle);
|
||||
predictionsToggle.setChecked(mayPredict); // Link to persistent option storage! Also needs handler.
|
||||
prefsKey = getLanguagePredictionPreferenceKey(lgCode);
|
||||
toggle.setOnClickListener(new PreferenceToggleListener(prefsKey, lgCode));
|
||||
predictionsToggle.setOnClickListener(new PreferenceToggleListener(prefsKey, lgCode));
|
||||
|
||||
overrideCorrectionsToggle(mayPredict);
|
||||
|
||||
layout = (RelativeLayout)findViewById(R.id.model_picker);
|
||||
textView = (TextView) layout.findViewById(R.id.text1);
|
||||
|
|
@ -305,6 +317,25 @@ public final class LanguageSettingsActivity extends AppCompatActivity {
|
|||
return langID + correctionPrefSuffix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the enable and visibility of corrections toggle,
|
||||
* and overrides the enable of the corrections text view.
|
||||
* Does not change the corrections toggle value.
|
||||
* @param override boolean - Value from predictions toggle
|
||||
* When true, enables corrections toggle and text field, and makes corrections toggle visible
|
||||
* When false, disables corrections toggle and text field, and makes corrections toggle invisible
|
||||
*/
|
||||
private void overrideCorrectionsToggle(boolean override) {
|
||||
if (correctionsTextView != null) {
|
||||
correctionsTextView.setEnabled(override);
|
||||
}
|
||||
if (correctionsToggle != null) {
|
||||
correctionsToggle.setEnabled(override);
|
||||
int visibility = override ? View.VISIBLE : View.INVISIBLE;
|
||||
correctionsToggle.setVisibility(visibility);
|
||||
}
|
||||
}
|
||||
|
||||
// Fully details the building of this Activity's list view items.
|
||||
static private class FilteredKeyboardsAdapter extends NestedAdapter<com.tavultesoft.kmea.data.Keyboard, Dataset.Keyboards, String> {
|
||||
static final int RESOURCE = R.layout.list_row_layout1;
|
||||
|
|
|
|||
5
android/KMEA/app/src/main/res/drawable/textview_item.xml
Normal file
5
android/KMEA/app/src/main/res/drawable/textview_item.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="false" android:color="@android:color/darker_gray" />
|
||||
<item android:color="@android:color/black"/>
|
||||
</selector>
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
<TextView
|
||||
android:id="@+id/text1"
|
||||
android:textColor="@android:color/black"
|
||||
android:textColor="@drawable/textview_item"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="15dp"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,9 @@
|
|||
## 13.0 alpha
|
||||
* Start version 13.0
|
||||
|
||||
## 2019-09-23 12.0.4092 beta
|
||||
* Disable corrections toggle when predictions are disabled (#2119)
|
||||
|
||||
## 2019-09-20 12.0.4091 beta
|
||||
* Update offline help content (#2104)
|
||||
|
||||
|
|
|
|||
|
|
@ -1524,6 +1524,7 @@
|
|||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
ENABLE_BITCODE = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
|
|
@ -1577,6 +1578,7 @@
|
|||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
ENABLE_BITCODE = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ class LanguageSettingsViewController: UITableViewController {
|
|||
userDefaults.set(predictSetting: value, forLanguageID: self.language.id)
|
||||
|
||||
// Reactively set the corrections switch interactivity state.
|
||||
self.doCorrectionsSwitch?.isEnabled = value
|
||||
self.doCorrectionsSwitch?.isHidden = !value
|
||||
self.doCorrectionsLabel?.isEnabled = value
|
||||
self.correctionsCell?.isUserInteractionEnabled = value
|
||||
|
||||
|
|
@ -163,7 +163,7 @@ class LanguageSettingsViewController: UITableViewController {
|
|||
}
|
||||
|
||||
// Disable interactivity if the prediction toggle is set to 'off'.
|
||||
doCorrectionsSwitch!.isEnabled = userDefaults.predictSettingForLanguage(languageID: self.language.id)
|
||||
doCorrectionsSwitch!.isHidden = !userDefaults.predictSettingForLanguage(languageID: self.language.id)
|
||||
cell.isUserInteractionEnabled = userDefaults.predictSettingForLanguage(languageID: self.language.id)
|
||||
} else { // rows 3 and 4
|
||||
cell.accessoryType = .disclosureIndicator
|
||||
|
|
@ -229,7 +229,7 @@ class LanguageSettingsViewController: UITableViewController {
|
|||
case 1:
|
||||
doCorrectionsLabel = cell.textLabel
|
||||
cell.textLabel?.text = "Enable corrections"
|
||||
cell.textLabel?.isEnabled = doCorrectionsSwitch?.isEnabled ?? false
|
||||
cell.textLabel?.isEnabled = !(doCorrectionsSwitch?.isHidden ?? false)
|
||||
case 2:
|
||||
cell.textLabel?.text = "Dictionaries"
|
||||
cell.accessoryType = .disclosureIndicator
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@
|
|||
## 13.0 alpha
|
||||
* Start version 13.0
|
||||
|
||||
## 2019-09-23 12.0.86 beta
|
||||
* Fixes issue in Toolbar UI for some keyboards with language ids that include subtags (#2116)
|
||||
* Fixes issue with '=' key use on certain platforms in Firefox (#2118)
|
||||
|
||||
## 2019-09-20 12.0.85 beta
|
||||
* Adds failsafe in case of sticky backspace scenarios, making it simpler to cancel. (#2107)
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ if(!window['keyman']['ui']['name']) {
|
|||
langKeyboardListNodes: [],
|
||||
selectedRegion: 'as',
|
||||
listedKeyboards: [],
|
||||
catchAllRegion: 'un',
|
||||
keyboardListPriority: 0,
|
||||
maxListedKeyboards: 1,
|
||||
lastActiveControl: null,
|
||||
|
|
@ -81,10 +82,10 @@ if(!window['keyman']['ui']['name']) {
|
|||
|
||||
ui.ToolBar_Text['ca']='Central America';
|
||||
ui.ToolBar_Text['sa']='South America';
|
||||
ui.ToolBar_Text['na']='North America';
|
||||
ui.ToolBar_Text['na']='Americas';
|
||||
ui.ToolBar_Text['eu']='Europe';
|
||||
ui.ToolBar_Text['af']='Africa';
|
||||
ui.ToolBar_Text['me']='Middle east';
|
||||
ui.ToolBar_Text['un']='Undetermined';
|
||||
ui.ToolBar_Text['as']='Asia';
|
||||
ui.ToolBar_Text['oc']='Oceania';
|
||||
|
||||
|
|
@ -147,14 +148,14 @@ if(!window['keyman']['ui']['name']) {
|
|||
util['linkStyleSheet'](util['getOption']('resources')+'ui/toolbar/kmwuitoolbar.css');
|
||||
|
||||
ui.regions = {};
|
||||
ui.regions['ca'] = {t: ui.ToolBar_Text['ca'], m: '49,52,65,54,68,57,71,56,73,59,75,60,93,61,94,58,97,58,101,59,107,60,114,64,115,68,114,77,104,74,98,75,96,78,95,82,90,81,85,80,82,76,78,74,74,73,65,68,57,61' },
|
||||
ui.regions['sa'] = {t: ui.ToolBar_Text['sa'], m: '82,82,95,82,96,78,98,75,104,74,114,77,120,79,124,83,126,87,141,90,142,97,138,103,135,113,127,116,123,124,115,131,112,132,109,138,117,139,140,141,141,146,134,148,114,145,109,148,100,148,91,143,91,130,96,111,89,102,83,95,77,89' },
|
||||
ui.regions['na'] = {t: ui.ToolBar_Text['na'], m: '0,3,0,37,24,32,35,37,43,47,49,52,65,54,68,57,71,56,73,59,75,60,93,61,93,57,103,49,118,41,126,41,136,23,148,17,156,14,164,5,164,0,57,0,35,5,25,9,5,8' },
|
||||
//ui.regions['ca'] = {t: ui.ToolBar_Text['ca'], m: '49,52,65,54,68,57,71,56,73,59,75,60,93,61,94,58,97,58,101,59,107,60,114,64,115,68,114,77,104,74,98,75,96,78,95,82,90,81,85,80,82,76,78,74,74,73,65,68,57,61' },
|
||||
//ui.regions['sa'] = {t: ui.ToolBar_Text['sa'], m: '82,82,95,82,96,78,98,75,104,74,114,77,120,79,124,83,126,87,141,90,142,97,138,103,135,113,127,116,123,124,115,131,112,132,109,138,117,139,140,141,141,146,134,148,114,145,109,148,100,148,91,143,91,130,96,111,89,102,83,95,77,89' },
|
||||
ui.regions['na'] = {t: ui.ToolBar_Text['na'], m: '0,3,0,37,24,32,35,37,43,47,49,52,65,54,68,57,71,56,73,59,75,60,93,61,93,57,103,49,118,41,126,41,136,23,148,17,156,14,164,5,164,0,57,0,35,5,25,9,5,8,49,52,65,54,68,57,71,56,73,59,75,60,93,61,94,58,97,58,101,59,107,60,114,64,115,68,114,77,104,74,98,75,96,78,95,82,90,81,85,80,82,76,78,74,74,73,65,68,57,61,82,82,95,82,96,78,98,75,104,74,114,77,120,79,124,83,126,87,141,90,142,97,138,103,135,113,127,116,123,124,115,131,112,132,109,138,117,139,140,141,141,146,134,148,114,145,109,148,100,148,91,143,91,130,96,111,89,102,83,95,77,89' },
|
||||
ui.regions['eu'] = {t: ui.ToolBar_Text['eu'], m: '145,29,146,19,158,14,171,6,187,2,206,1,217,4,227,11,231,16,231,33,227,34,225,35,225,37,227,39,228,44,228,47,227,48,223,46,218,44,215,43,208,43,203,45,202,48,205,52,201,52,195,49,189,50,187,48,177,48,175,49,166,50,147,33' },
|
||||
ui.regions['af'] = {t: ui.ToolBar_Text['af'], m: '150,58,158,50,166,50,175,49,177,48,187,48,189,50,195,49,201,52,205,52,207,53,221,75,229,75,231,77,231,85,227,92,232,101,237,106,237,112,227,115,222,118,206,125,199,127,193,127,185,111,183,104,180,87,168,89,153,85,143,71,147,60' },
|
||||
ui.regions['me'] = {t: ui.ToolBar_Text['me'], m: '205,52,202,48,203,45,208,43,215,43,218,44,223,46,227,48,232,48,239,48,240,49,239,53,242,60,243,65,237,76,231,77,229,75,221,75,207,53' },
|
||||
ui.regions['as'] = {t: ui.ToolBar_Text['as'], m: '219,1,221,6,228,12,231,16,231,33,227,34,225,35,225,37,227,39,229,45,232,48,239,48,240,49,239,53,242,60,243,65,249,70,252,81,259,87,271,87,278,95,289,100,303,101,311,98,320,98,323,98,323,84,311,81,308,73,307,65,317,57,330,50,334,44,348,36,364,38,375,34,375,8,355,8,336,5,292,1,285,0,219,0' },
|
||||
ui.regions['oc'] = {t: ui.ToolBar_Text['oc'], m: '288,117,289,107,303,101,311,98,323,98,323,84,333,77,344,73,362,80,369,88,375,96,375,141,352,143,323,142,316,136,310,130,291,130' }
|
||||
ui.regions['un'] = {t: ui.ToolBar_Text['un'], m: '205,52,202,48,203,45,208,43,215,43,218,44,223,46,227,48,232,48,239,48,240,49,239,53,242,60,243,65,237,76,231,77,229,75,221,75,207,53' },
|
||||
|
||||
ui.toolbarNode = ui.createNode('div', 'kmw_controls');
|
||||
ui.toolbarNode.style.display='block';
|
||||
|
|
@ -332,9 +333,17 @@ if(!window['keyman']['ui']['name']) {
|
|||
var max = 0, count = 0, languageCode = '';
|
||||
|
||||
// Get number of languages for the region
|
||||
for(var j=0; j<Keyboards.length; j++)
|
||||
{
|
||||
if(Keyboards[j]['RegionCode'] != i) continue; // Not this region
|
||||
for(var j=0; j<Keyboards.length; j++) {
|
||||
// REVERT: ensures that keyboards without visible map region get displayed SOMEWHERE.
|
||||
var kbdRegion = Keyboards[j]['RegionCode'];
|
||||
if(!ui.regions[kbdRegion]) {
|
||||
// For now, we'll display them within the 'middle-east' region.
|
||||
if(i != ui.catchAllRegion) {
|
||||
continue;
|
||||
}
|
||||
} else if(kbdRegion != i) {
|
||||
continue; // Not this region
|
||||
}
|
||||
|
||||
// Get JUST the language code for this section. BCP-47 codes can include more!
|
||||
var bcpSubtags: string[] = keymanweb['util']['getLanguageCodes'](Keyboards[j]['LanguageCode']);
|
||||
|
|
@ -347,9 +356,17 @@ if(!window['keyman']['ui']['name']) {
|
|||
|
||||
// Add language list to columns for the region
|
||||
languageCode='';
|
||||
for(var j=0; j<Keyboards.length; j++)
|
||||
{
|
||||
if(Keyboards[j]['RegionCode'] != i) continue; // Not this region
|
||||
for(var j=0; j<Keyboards.length; j++) {
|
||||
// REVERT: ensures that keyboards without visible map region get displayed SOMEWHERE.
|
||||
var kbdRegion = Keyboards[j]['RegionCode'];
|
||||
if(!ui.regions[kbdRegion]) {
|
||||
// For now, we'll display them within the 'middle-east' region.
|
||||
if(i != ui.catchAllRegion) {
|
||||
continue;
|
||||
}
|
||||
} else if(kbdRegion != i) {
|
||||
continue; // Not this region
|
||||
}
|
||||
|
||||
var bcpSubtags: string[] = keymanweb['util']['getLanguageCodes'](Keyboards[j]['LanguageCode']);
|
||||
if(bcpSubtags[0] == languageCode) { // Same language as previous keyboard, so add it to that entry
|
||||
|
|
@ -641,21 +658,27 @@ if(!window['keyman']['ui']['name']) {
|
|||
* @param {Object} kbd
|
||||
* @return {boolean}
|
||||
**/
|
||||
ui.selectKeyboard = function(event,lang,kbd)
|
||||
{
|
||||
if(ui.selectedLanguage)
|
||||
{
|
||||
ui.selectKeyboard = function(event,lang,kbd) {
|
||||
if(ui.selectedLanguage) {
|
||||
var found = ui.findListedKeyboard(ui.selectedLanguage);
|
||||
if(found != null) ui.listedKeyboards[found].buttonNode.className = 'kmw_button';
|
||||
if(found != null) {
|
||||
ui.listedKeyboards[found].buttonNode.className = 'kmw_button';
|
||||
}
|
||||
}
|
||||
|
||||
ui.offButtonNode.className = 'kmw_button';
|
||||
ui.selectedLanguage = lang;
|
||||
ui.selectedKeyboard = kbd;
|
||||
ui.SelectedLanguage = lang.id;
|
||||
|
||||
// In 12.0, this UI class has only been partially converted to BCP-47.
|
||||
// `lang.id` refers to the base language identifier and will NOT include
|
||||
// any subtags. We want the FULL language identifier here, with subtags.
|
||||
ui.SelectedLanguage = kbd.LanguageCode;
|
||||
|
||||
// Return focus to input area and activate the selected keyboard
|
||||
ui.setLastFocus(); //*****this seems out of sequence???
|
||||
ui.addKeyboardToList(lang,kbd);
|
||||
keymanweb['setActiveKeyboard'](kbd['InternalName'],lang.id);
|
||||
ui.addKeyboardToList(lang, kbd);
|
||||
keymanweb['setActiveKeyboard'](kbd['InternalName'], kbd['LanguageCode']);
|
||||
ui.listedKeyboards[ui.findListedKeyboard(lang)].buttonNode.className = 'kmw_button_selected';
|
||||
|
||||
// Always save current state when selecting a keyboard
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 271 KiB |
|
|
@ -320,7 +320,7 @@ namespace com.keyman.text {
|
|||
let kbdInterface = keyman.interface;
|
||||
let keyMapManager = keyman.keyMapManager;
|
||||
|
||||
if(!keyman.isEmbedded && !fromOSK && !window.event) {
|
||||
if(!keyman.isEmbedded && !fromOSK && keyman.util.device.browser == 'firefox') {
|
||||
// I1466 - Convert the - keycode on mnemonic as well as positional layouts
|
||||
// FireFox, Mozilla Suite
|
||||
if(keyMapManager.browserMap.FF['k'+keyEvent.Lcode]) {
|
||||
|
|
@ -411,8 +411,7 @@ namespace com.keyman.text {
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
if(!keyman.isEmbedded && !fromOSK && !window.event) {
|
||||
if(!keyman.isEmbedded && !fromOSK && keyman.util.device.browser == 'firefox') {
|
||||
// I1466 - Convert the - keycode on mnemonic as well as positional layouts
|
||||
// FireFox, Mozilla Suite
|
||||
if(keyMapManager.browserMap.FF['k'+keyEvent.Lcode]) {
|
||||
|
|
|
|||
|
|
@ -306,6 +306,7 @@ begin
|
|||
begin
|
||||
InitThemeLibrary;
|
||||
SetThemeAppProperties(STAP_ALLOW_NONCLIENT or STAP_ALLOW_CONTROLS or STAP_ALLOW_WEBCONTENT);
|
||||
Application.MainFormOnTaskBar := True;
|
||||
Application.Initialize;
|
||||
// TStyleManager.TrySetStyle(FKeymanDeveloperOptions.DisplayTheme);
|
||||
Application.Title := 'Keyman Developer';
|
||||
|
|
@ -313,8 +314,8 @@ begin
|
|||
if TikeActive then Exit;
|
||||
InitClasses;
|
||||
Application.CreateForm(TmodWebHttpServer, modWebHttpServer);
|
||||
Application.CreateForm(TfrmKeymanDeveloper, frmKeymanDeveloper);
|
||||
ShowStartup;
|
||||
Application.CreateForm(TfrmKeymanDeveloper, frmKeymanDeveloper);
|
||||
ShowStartup;
|
||||
Application.Run;
|
||||
end;
|
||||
finally
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
$(function () {
|
||||
window.builder = this;
|
||||
|
||||
|
||||
(function(search) {
|
||||
var q = search.match(/Filename=(.+)(&|$)/);
|
||||
if(q) {
|
||||
|
|
@ -351,7 +351,7 @@ $(function () {
|
|||
['',''], // 'K_?3E', // &H3E
|
||||
['',''], // 'K_?3F', // &H3F
|
||||
['',''], // 'K_?40', // &H40
|
||||
|
||||
|
||||
['a','A'], // 'K_A', // &H41
|
||||
['b','B'], // 'K_B', // &H42
|
||||
['c','C'], // 'K_C', // &H43
|
||||
|
|
@ -555,8 +555,8 @@ $(function () {
|
|||
['',''], // 'K_?FE', // &HFE
|
||||
['',''], // 'K_?FF' // &HFF
|
||||
];
|
||||
|
||||
|
||||
|
||||
|
||||
this.lookupKeyNames = [];
|
||||
|
||||
for (var i = 0; i < this.standardKeyNames.length; i++) {
|
||||
|
|
@ -595,49 +595,49 @@ $(function () {
|
|||
"NO_SCROLL_LOCK":0x2000,
|
||||
"VIRTUAL_KEY":0x4000*/
|
||||
};
|
||||
|
||||
|
||||
// Lists the combinations that we allow users to use. Some are mutually exclusive,
|
||||
// such as Left+Right modifiers, or chiral and non-chiral modifiers (excl. Shift)
|
||||
this.validModifierCombinations = [
|
||||
0,
|
||||
|
||||
|
||||
this.modifierCodes.LCTRL,
|
||||
this.modifierCodes.RCTRL,
|
||||
|
||||
|
||||
this.modifierCodes.LALT,
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.LALT,
|
||||
|
||||
|
||||
this.modifierCodes.RALT,
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.RALT,
|
||||
|
||||
|
||||
this.modifierCodes.SHIFT,
|
||||
|
||||
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.LALT | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.LALT | this.modifierCodes.SHIFT,
|
||||
|
||||
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RALT | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.RALT | this.modifierCodes.SHIFT,
|
||||
|
||||
|
||||
this.modifierCodes.CTRL,
|
||||
this.modifierCodes.CTRL | this.modifierCodes.SHIFT,
|
||||
|
||||
|
||||
this.modifierCodes.ALT,
|
||||
this.modifierCodes.CTRL | this.modifierCodes.ALT,
|
||||
this.modifierCodes.SHIFT | this.modifierCodes.ALT,
|
||||
this.modifierCodes.SHIFT | this.modifierCodes.CTRL | this.modifierCodes.ALT
|
||||
];
|
||||
|
||||
|
||||
this.minimalModifierCombinations = [
|
||||
0,
|
||||
this.modifierCodes.RALT,
|
||||
this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RALT | this.modifierCodes.SHIFT
|
||||
];
|
||||
|
||||
|
||||
this.showAllModifierCombinations = false;
|
||||
|
||||
|
||||
// Add CAPS and NO_CAPS variants for all of the above
|
||||
(function(c, codes) {
|
||||
var i, n = c.length;
|
||||
|
|
@ -646,7 +646,7 @@ $(function () {
|
|||
for(i = 0; i < n; i++)
|
||||
c.push(c[i] | codes.NO_CAPS);
|
||||
})(this.validModifierCombinations, this.modifierCodes);
|
||||
|
||||
|
||||
this.modifierNames = [
|
||||
'leftctrl', // 0x001
|
||||
'rightctrl', // 0x002
|
||||
|
|
@ -659,7 +659,7 @@ $(function () {
|
|||
'caps', // 0x100
|
||||
'nocaps' // 0x200
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* Get kebab-cased full name of a modifier combination given a bitmask
|
||||
*
|
||||
|
|
@ -688,7 +688,7 @@ $(function () {
|
|||
builder.prepareLayer();
|
||||
builder.saveState();
|
||||
});
|
||||
|
||||
|
||||
$('#chkShowAllModifierOptions').click(function () {
|
||||
builder.showAllModifierCombinations = $('#chkShowAllModifierOptions')[0].checked;
|
||||
builder.fillModifierSelect();
|
||||
|
|
@ -731,8 +731,8 @@ $(function () {
|
|||
/**
|
||||
* Replace default key names by special font codes for modifier keys (copied from kmwosk.js)
|
||||
*
|
||||
* @param {string} oldText
|
||||
* @return {string}
|
||||
* @param {string} oldText
|
||||
* @return {string}
|
||||
**/
|
||||
|
||||
this.renameSpecialKey = function (oldText) {
|
||||
|
|
@ -752,12 +752,12 @@ $(function () {
|
|||
this.fillLayerSelect();
|
||||
this.fillModifierSelect();
|
||||
};
|
||||
|
||||
|
||||
this.fillLayerSelect = function() {
|
||||
$('#selLayer option').remove();
|
||||
$('#selKeyNextLayer option').remove();
|
||||
$('#selSubKeyNextLayer option').remove();
|
||||
|
||||
|
||||
opt = document.createElement('option');
|
||||
$(opt).attr('value', '').text('(none)');
|
||||
$('#selKeyNextLayer').append(opt);
|
||||
|
|
@ -781,15 +781,15 @@ $(function () {
|
|||
$('#selSubKeyNextLayer').append(opt);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.fillModifierSelect = function() {
|
||||
var modifiers = this.showAllModifierCombinations ? this.validModifierCombinations : this.minimalModifierCombinations;
|
||||
|
||||
|
||||
var
|
||||
$selKeyLayerOverride = $('#selKeyLayerOverride'),
|
||||
$selSubKeyLayerOverride = $('#selSubKeyLayerOverride'),
|
||||
$addLayerList = $('#addLayerList');
|
||||
|
||||
|
||||
var add = function(e, val, text) {
|
||||
var opt = document.createElement('option');
|
||||
if(typeof text != 'undefined') {
|
||||
|
|
@ -800,7 +800,7 @@ $(function () {
|
|||
}
|
||||
e.append(opt);
|
||||
};
|
||||
|
||||
|
||||
$('#selKeyLayerOverride option').remove();
|
||||
$('#selSubKeyLayerOverride option').remove();
|
||||
$('#addLayerList option').remove();
|
||||
|
|
@ -808,24 +808,24 @@ $(function () {
|
|||
add($selKeyLayerOverride, '', '(current layer)');
|
||||
add($selSubKeyLayerOverride, '', '(current layer)');
|
||||
add($addLayerList, '', '(custom)');
|
||||
|
||||
|
||||
|
||||
|
||||
for (var modifier = 0; modifier < modifiers.length; modifier++) {
|
||||
var name = this.getModifierCombinationName(modifiers[modifier]);
|
||||
|
||||
|
||||
add($selKeyLayerOverride, name);
|
||||
add($selSubKeyLayerOverride, name);
|
||||
add($addLayerList, name);
|
||||
}
|
||||
|
||||
|
||||
var alreadyAdded = function(modifier) {
|
||||
return builder.minimalModifierCombinations.indexOf(modifier) >= 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// check all keys for modifier usage
|
||||
var modifierNames = [];
|
||||
|
||||
|
||||
for(var i = 0; i < KVKL[builder.lastPlatform].layer.length; i++) {
|
||||
var layer = KVKL[builder.lastPlatform].layer[i];
|
||||
for(var j = 0; j < layer.row.length; j++) {
|
||||
|
|
@ -844,11 +844,11 @@ $(function () {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var isUsed = function(modifierName) {
|
||||
return modifierNames.indexOf(modifierName) >= 0;
|
||||
};
|
||||
|
||||
|
||||
if(!this.showAllModifierCombinations) {
|
||||
// Add any layer names that are already referenced
|
||||
for(modifier = 0; modifier < this.validModifierCombinations.length; modifier++) {
|
||||
|
|
@ -869,15 +869,15 @@ $(function () {
|
|||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
this.isLayerIdShifted = function(id) {
|
||||
return (builder.getModifierCombinationFromLayerId(id) & this.modifierCodes.SHIFT) != 0;
|
||||
};
|
||||
|
||||
|
||||
this.prepareLayer = function () {
|
||||
var layer = KVKL[builder.lastPlatform].layer[builder.lastLayerIndex];
|
||||
|
||||
var isLayerShifted = builder.isLayerIdShifted(layer.id);
|
||||
|
||||
var isLayerShifted = builder.isLayerIdShifted(layer.id);
|
||||
|
||||
var width = 0; // calculate the widest and rescale
|
||||
for (var i = 0; i < layer.row.length; i++) {
|
||||
|
|
@ -967,7 +967,7 @@ $(function () {
|
|||
$(div).css('clear', 'both');
|
||||
$('#kbd').append(div);
|
||||
};
|
||||
|
||||
|
||||
this.getStandardKeyCap = function (id, shifted) {
|
||||
id = id ? id.toUpperCase() : '';
|
||||
var i = this.standardKeyNames.findIndex(function(x) { return x.toUpperCase() == id });
|
||||
|
|
@ -994,7 +994,7 @@ $(function () {
|
|||
}
|
||||
|
||||
$('#chkDisplayUnderlying')[0].checked = KVKL[builder.lastPlatform].displayUnderlying;
|
||||
|
||||
|
||||
builder.prepareLayers();
|
||||
builder.selectLayer(0);
|
||||
}
|
||||
|
|
@ -1050,7 +1050,7 @@ $(function () {
|
|||
if (!saveToRedo) {
|
||||
builder.redoStack = [];
|
||||
}
|
||||
builder.generate(true);
|
||||
builder.generate(true,false);
|
||||
var s = {
|
||||
KVKL: JSON.stringify(KVKL),
|
||||
platform: builder.lastPlatform,
|
||||
|
|
@ -1070,7 +1070,7 @@ $(function () {
|
|||
builder.enableUndoControls();
|
||||
builder.command('modified');
|
||||
}
|
||||
|
||||
|
||||
this.commands = [];
|
||||
|
||||
this.command = function (cmd) {
|
||||
|
|
@ -1127,7 +1127,7 @@ $(function () {
|
|||
|
||||
return row;
|
||||
};
|
||||
|
||||
|
||||
this.addKey = function (position, isSubKey, sp) {
|
||||
var key = document.createElement('div');
|
||||
var ktext = document.createElement('div');
|
||||
|
|
@ -1354,12 +1354,12 @@ $(function () {
|
|||
this.selectedKey = function () {
|
||||
return $('#kbd .selected');
|
||||
}
|
||||
|
||||
|
||||
this.wrapChange = function(f, opt) {
|
||||
return function() {
|
||||
if(typeof opt == 'object' && opt.saveOnce) {
|
||||
if (!builder.hasSavedKeyUndo) {
|
||||
builder.saveUndo();
|
||||
if (!builder.hasSavedKeyUndo) {
|
||||
builder.saveUndo();
|
||||
builder.hasSavedKeyUndo = true;
|
||||
} else {
|
||||
builder.command('modified');
|
||||
|
|
@ -1385,7 +1385,7 @@ $(function () {
|
|||
builder.selectedKey().data('width', $(this).val())
|
||||
.css('width', parseInt($(this).val(), 10) * this.xscale + 'px');
|
||||
}, {rescale: true}));
|
||||
|
||||
|
||||
$('#inpKeyName').change(builder.wrapChange(function () {
|
||||
builder.selectedKey().data('id', $(this).val());
|
||||
builder.updateKeyId(builder.selectedKey());
|
||||
|
|
@ -1727,14 +1727,14 @@ $(function () {
|
|||
builder.generateSubKeys();
|
||||
}));
|
||||
|
||||
this.generate = function (display) {
|
||||
this.generate = function (display, force) {
|
||||
var json = JSON.stringify(KVKL, null, ' ');
|
||||
|
||||
|
||||
if(!display) {
|
||||
// Save changed settings -- only when not saving undo
|
||||
KVKL[builder.lastPlatform].displayUnderlying = $('#chkDisplayUnderlying')[0].checked;
|
||||
}
|
||||
|
||||
|
||||
var layer = KVKL[builder.lastPlatform].layer[builder.lastLayerIndex];
|
||||
layer.row = [];
|
||||
|
||||
|
|
@ -1758,7 +1758,9 @@ $(function () {
|
|||
});
|
||||
|
||||
var newJson = JSON.stringify(KVKL, null, ' ');
|
||||
if(newJson != json) {
|
||||
if(force || newJson != json) {
|
||||
// When adding or deleting layers and platforms, we need to force because
|
||||
// that will not result in changes to the rows.
|
||||
$.ajax('/app/source/file', {
|
||||
'type': 'POST',
|
||||
'data': {
|
||||
|
|
@ -1771,7 +1773,7 @@ $(function () {
|
|||
};
|
||||
|
||||
this.post = this.generate;
|
||||
|
||||
|
||||
$('#wedgeAddRowAbove').click(builder.wrapChange(function () {
|
||||
var row = builder.addRow('above'); builder.selectKey(builder.addKey(row, false));
|
||||
}, {rescale: true}));
|
||||
|
|
@ -1804,16 +1806,16 @@ $(function () {
|
|||
builder.enableKeyControls();
|
||||
}));
|
||||
|
||||
$('#btnGenerate').click(function () { builder.generate(); });
|
||||
$('#btnGenerate').click(function () { builder.generate(false,false); });
|
||||
|
||||
$('#selPlatform').change(function () {
|
||||
if (builder.lastPlatform) builder.generate();
|
||||
if (builder.lastPlatform) builder.generate(false,false);
|
||||
builder.selectPlatform();
|
||||
builder.saveState();
|
||||
});
|
||||
|
||||
$('#selLayer').change(function () {
|
||||
if (builder.lastPlatform) builder.generate();
|
||||
if (builder.lastPlatform) builder.generate(false,false);
|
||||
builder.selectLayer();
|
||||
builder.saveState();
|
||||
});
|
||||
|
|
@ -1830,7 +1832,6 @@ $(function () {
|
|||
buttons: {
|
||||
"OK": function () {
|
||||
builder.saveUndo();
|
||||
builder.generate();
|
||||
|
||||
var platform = $('#selAddPlatform').val();
|
||||
KVKL[platform] = $.extend(true, {}, KVKL[builder.lastPlatform]); // copy existing platform
|
||||
|
|
@ -1839,6 +1840,8 @@ $(function () {
|
|||
$('#selPlatform').val(platform);
|
||||
builder.selectPlatform();
|
||||
|
||||
builder.generate(false,true);
|
||||
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Cancel": function () {
|
||||
|
|
@ -1870,9 +1873,9 @@ $(function () {
|
|||
delete KVKL[platform];
|
||||
builder.lastPlatform = null;
|
||||
builder.preparePlatforms();
|
||||
builder.post();
|
||||
builder.generate(false,true);
|
||||
});
|
||||
|
||||
|
||||
$('#chkDisplayUnderlying').click(function () {
|
||||
builder.saveUndo();
|
||||
var platform = $('#selPlatform').val();
|
||||
|
|
@ -1959,8 +1962,8 @@ $(function () {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
$('#addLayerName').on('input', function() {
|
||||
var layerName = $(this).val();
|
||||
$('#addLayerList').val(layerName);
|
||||
|
|
@ -1971,7 +1974,7 @@ $(function () {
|
|||
$('#addLayerNote').text(layerName+' is a recognised modifier-aware layer name.');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('#addLayerList').change(function() {
|
||||
var v = $(this).val();
|
||||
if(v == '(custom)') {
|
||||
|
|
@ -2002,14 +2005,13 @@ $(function () {
|
|||
}
|
||||
}
|
||||
builder.saveUndo();
|
||||
builder.generate();
|
||||
var layer = $.extend(true, {}, KVKL[builder.lastPlatform].layer[builder.lastLayerIndex]);
|
||||
layer.id = id;
|
||||
var n = KVKL[builder.lastPlatform].layer.push(layer) - 1;
|
||||
builder.selectPlatform();
|
||||
$('#selLayer').val(n);
|
||||
builder.selectLayer();
|
||||
builder.post();
|
||||
builder.generate(false,true);
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Cancel": function () {
|
||||
|
|
@ -2027,7 +2029,7 @@ $(function () {
|
|||
builder.saveUndo();
|
||||
KVKL[builder.lastPlatform].layer.splice(builder.lastLayerIndex, 1);
|
||||
builder.selectPlatform();
|
||||
builder.post();
|
||||
builder.generate(false,true);
|
||||
});
|
||||
|
||||
$('#btnEditLayer').click(function () {
|
||||
|
|
@ -2102,23 +2104,23 @@ $(function () {
|
|||
//
|
||||
// Character map drag+drop and double-click insertion
|
||||
//
|
||||
|
||||
|
||||
builder.charmapDragOver = function(o) {
|
||||
|
||||
|
||||
// Convert X, Y to document coordinates
|
||||
|
||||
|
||||
let target = document.elementFromPoint(o.x, o.y);
|
||||
if(target === null || (target.nodeName != 'INPUT' && target.className != 'text')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
builder.charmapDragDrop = function(o) {
|
||||
|
||||
// Convert X, Y to document coordinates
|
||||
|
||||
|
||||
if(o.x >= 0 && o.y >= 0) {
|
||||
var target = document.elementFromPoint(o.x, o.y);
|
||||
if(target === null) {
|
||||
|
|
@ -2141,42 +2143,42 @@ $(function () {
|
|||
// Double-click insertion, so use last focused control
|
||||
var target = $(document.lastFocus);
|
||||
}
|
||||
|
||||
|
||||
// Focus the control and add the text
|
||||
|
||||
target.focus();
|
||||
target.val(target.val() + o.text);
|
||||
};
|
||||
|
||||
|
||||
builder.loadingState = true;
|
||||
|
||||
|
||||
builder.saveState = function() {
|
||||
if(builder.loadingState) return;
|
||||
|
||||
|
||||
var state = {
|
||||
platform: builder.lastPlatform,
|
||||
layer: builder.lastLayerIndex,
|
||||
presentation: $('#selPlatformPresentation').val()
|
||||
};
|
||||
|
||||
|
||||
var key = builder.selectedKey();
|
||||
if(key.length > 0) {
|
||||
state.key = key.data('id');
|
||||
}
|
||||
|
||||
|
||||
var subkey = builder.selectedSubKey();
|
||||
if (subkey.length > 0) {
|
||||
state.subkey = $(subkey).data('id');
|
||||
}
|
||||
|
||||
|
||||
$.post('/app/source/toucheditor/state', {
|
||||
'Filename': builder.filename,
|
||||
'State': JSON.stringify(state)
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
builder.loadState = function() {
|
||||
$.get('/app/source/toucheditor/state',
|
||||
$.get('/app/source/toucheditor/state',
|
||||
{
|
||||
'Filename': builder.filename
|
||||
},
|
||||
|
|
@ -2197,7 +2199,7 @@ $(function () {
|
|||
}
|
||||
if(data.key) {
|
||||
builder.selectKey($('#kbd .key').filter(function (index) { return $(this).data('id') === data.key; }).first());
|
||||
}
|
||||
}
|
||||
if(data.subkey) {
|
||||
builder.selectSubKey($('#sk .key').filter(function (index) { return $(this).data('id') === data.subkey; }).first());
|
||||
}
|
||||
|
|
@ -2205,10 +2207,9 @@ $(function () {
|
|||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
builder.preparePlatforms();
|
||||
builder.enableUndoControls();
|
||||
|
||||
|
||||
builder.loadState();
|
||||
});
|
||||
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
{"id": "K_B","text":"B"},
|
||||
{"id": "K_N","text":"N"},
|
||||
{"id": "K_M","text":"M"},
|
||||
{"id": "K_PERIOD","text": ".","sk": [
|
||||
{"id": "K_PERIOD","text": ".", "layer": "default", "sk": [
|
||||
{"text": ",","id": "K_COMMA", "layer": "default"},
|
||||
{"text": "!","id": "K_1", "layer": "shift"},
|
||||
{"text": "?","id": "K_SLASH", "layer": "shift"},
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
},
|
||||
{
|
||||
"id": 4,
|
||||
"key": [
|
||||
"key": [
|
||||
{"id": "K_NUMLOCK","text": "*123*","width":"140","sp": "1","nextlayer": "numeric"},
|
||||
{"id": "K_LOPT","text": "*Menu*","width": "120","sp": "1"},
|
||||
{"id": "K_SPACE","text": "","width": "630","sp": "0"},
|
||||
|
|
@ -244,7 +244,7 @@
|
|||
{"id": "K_J","text":"j"},
|
||||
{"id": "K_K","text":"k"},
|
||||
{"id": "K_L","text":"l"},
|
||||
{"text": "","width": "10","sp": "10"}
|
||||
{"text": "","width": "10","sp": "10"}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -313,7 +313,7 @@
|
|||
{"id": "K_J","text":"J"},
|
||||
{"id": "K_K","text":"K"},
|
||||
{"id": "K_L","text":"L"},
|
||||
{"text": "","width": "10","sp": "10"}
|
||||
{"text": "","width": "10","sp": "10"}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -327,7 +327,7 @@
|
|||
{"id": "K_B","text":"B"},
|
||||
{"id": "K_N","text":"N"},
|
||||
{"id": "K_M","text":"M"},
|
||||
{"id": "K_PERIOD","text": ".","sk": [
|
||||
{"id": "K_PERIOD","text": ".", "layer": "default", "sk": [
|
||||
{"text": ",","id": "K_COMMA", "layer": "default"},
|
||||
{"text": "!","id": "K_1", "layer": "shift"},
|
||||
{"text": "?","id": "K_SLASH", "layer": "shift"},
|
||||
|
|
|
|||
|
|
@ -3,6 +3,12 @@
|
|||
## 13.0 alpha
|
||||
* Start version 13.0
|
||||
|
||||
## 2019-09-24 12.0.36 beta
|
||||
* General: File type icons were mismatched (#2112)
|
||||
* Project: Shift layer in basic touch layout template had incorrect modifier for period (.) on shift layer (#2113)
|
||||
* Touch layout editor: Adding or deleting a playform or layer and making no other changes would not stick (#2114)
|
||||
* General: On Windows 7 and 8, in some circumstances dialog boxes could appear behind the main form (#2115)
|
||||
|
||||
## 2019-09-20 12.0.34 beta
|
||||
* Add basic wordlist editor to Keyman Developer (#2086)
|
||||
|
||||
|
|
|
|||
|
|
@ -121,8 +121,6 @@
|
|||
|
||||
<RegistryValue Root="HKCR" Key=".kmn" Type="string" Value="KeymanDeveloper.File.Keyboard" />
|
||||
<RegistryValue Root="HKCR" Key=".kps" Type="string" Value="KeymanDeveloper.File.Package" />
|
||||
<RegistryValue Root="HKCR" Key=".kct" Type="string" Value="KeymanDeveloper.File.Branding" />
|
||||
<RegistryValue Root="HKCR" Key=".kpp" Type="string" Value="KeymanDeveloper.File.Distribution" />
|
||||
|
||||
<RegistryValue Root="HKCR" Key=".kvks" Type="string" Value="KeymanDeveloper.File.OnScreenKeyboard" />
|
||||
<RegistryValue Root="HKCR" Key=".kpj" Type="string" Value="KeymanDeveloper.File.Project" />
|
||||
|
|
@ -131,50 +129,38 @@
|
|||
<RegistryValue Root="HKCR" Key=".kmp" Type="string" Value="Keyman.File.Package" />
|
||||
<RegistryValue Root="HKCR" Key=".kvk" Type="string" Value="Keyman.File.OnScreenKeyboard" />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard" Type="string" Value="Keyman Developer Keyboard Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard" Type="string" Value="Keyman Keyboard Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard\DefaultIcon" Type="string" Value="[#tike.exe],1" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Keyboard\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package" Type="string" Value="Keyman Developer Package Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package" Type="string" Value="Keyman Package Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package\DefaultIcon" Type="string" Value="[#tike.exe],2" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Package\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Branding" Type="string" Value="Keyman Developer Branding Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Branding\DefaultIcon" Type="string" Value="[#tike.exe],3" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Branding\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Branding\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Branding\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Distribution" Type="string" Value="Keyman Developer Distribution Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Distribution\DefaultIcon" Type="string" Value="[#tike.exe],4" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Distribution\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Distribution\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Distribution\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project" Type="string" Value="Keyman Developer Project Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project\DefaultIcon" Type="string" Value="[#tike.exe],5" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project\DefaultIcon" Type="string" Value="[#tike.exe],3" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project\Shell" Type="string" Value="open" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project\Shell\open" Type="string" Value="&Open" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.Project\Shell\open\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Keyboard" Type="string" Value="Keyman Keyboard File" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Keyboard\DefaultIcon" Type="string" Value="[#tike.exe],6" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Keyboard\DefaultIcon" Type="string" Value="[#tike.exe],4" />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Package" Type="string" Value="Keyman Package File" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Package\DefaultIcon" Type="string" Value="[#tike.exe],7" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.Package\DefaultIcon" Type="string" Value="[#tike.exe],5" />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard" Type="string" Value="Keyman Keyboard File" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard\DefaultIcon" Type="string" Value="[#tike.exe],10" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard" Type="string" Value="Keyman On Screen Keyboard File" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard\DefaultIcon" Type="string" Value="[#tike.exe],6" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="Keyman.File.OnScreenKeyboard\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard" Type="string" Value="Keyman Developer On Screen Keyboard File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard\DefaultIcon" Type="string" Value="[#tike.exe],11" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard" Type="string" Value="Keyman On Screen Keyboard Source File" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard\DefaultIcon" Type="string" Value="[#tike.exe],7" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard\Shell" Type="string" Value="edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard\Shell\edit" Type="string" Value="&Edit" />
|
||||
<RegistryValue Root="HKCR" Key="KeymanDeveloper.File.OnScreenKeyboard\Shell\edit\Command" Type="string" Value='"[#tike.exe]" "%1"' />
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue