This commit is contained in:
dgis 2019-01-08 23:25:06 +00:00
parent dbe24a0891
commit 33686c480a
6 changed files with 187 additions and 13 deletions

View file

@ -34,6 +34,8 @@ extern void mainViewResizeCallback(int x, int y);
extern int openFileFromContentResolver(const TCHAR * url, int writeAccess); extern int openFileFromContentResolver(const TCHAR * url, int writeAccess);
extern int closeFileFromContentResolver(int fd); extern int closeFileFromContentResolver(int fd);
extern int showAlert(const TCHAR * messageText, int flags); extern int showAlert(const TCHAR * messageText, int flags);
extern void sendMenuItemCommand(int menuItem);
void clipboardCopyText(const TCHAR * text); void clipboardCopyText(const TCHAR * text);
const TCHAR * clipboardPasteText(); const TCHAR * clipboardPasteText();

View file

@ -126,6 +126,13 @@ int showAlert(const TCHAR * messageText, int flags) {
return IDOK; return IDOK;
} }
void sendMenuItemCommand(int menuItem) {
JNIEnv *jniEnv = getJNIEnvironment();
jclass mainActivityClass = (*jniEnv)->GetObjectClass(jniEnv, mainActivity);
jmethodID midStr = (*jniEnv)->GetMethodID(jniEnv, mainActivityClass, "sendMenuItemCommand", "(I)V");
(*jniEnv)->CallVoidMethod(jniEnv, mainActivity, midStr, menuItem);
}
void clipboardCopyText(const TCHAR * text) { void clipboardCopyText(const TCHAR * text) {
JNIEnv *jniEnv = getJNIEnvironment(); JNIEnv *jniEnv = getJNIEnvironment();
jclass mainActivityClass = (*jniEnv)->GetObjectClass(jniEnv, mainActivity); jclass mainActivityClass = (*jniEnv)->GetObjectClass(jniEnv, mainActivity);

View file

@ -657,8 +657,9 @@ LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
//TODO //TODO
if(hWnd == 0 && Msg == WM_COMMAND) { if(hWnd == 0 && Msg == WM_COMMAND) {
int menuCommand = (wParam & 0xffff); int menuCommand = (wParam & 0xffff) - 40000;
LOGD("Menu Item %d", menuCommand); LOGD("Menu Item %d", menuCommand);
sendMenuItemCommand(menuCommand);
} }
return NULL; return NULL;
} }
@ -1510,9 +1511,6 @@ BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdc
} }
UINT SetDIBColorTable(HDC hdc, UINT iStart, UINT cEntries, CONST RGBQUAD *prgbq) { UINT SetDIBColorTable(HDC hdc, UINT iStart, UINT cEntries, CONST RGBQUAD *prgbq) {
if(prgbq if(prgbq
// && hdc && hdc->selectedPalette && hdc->selectedPalette->paletteLog && hdc->selectedPalette->paletteLog->palPalEntry
// && hdc->selectedPalette->paletteLog->palNumEntries > 0 && iStart < hdc->selectedPalette->paletteLog->palNumEntries) {
// PALETTEENTRY * palPalEntry = hdc->selectedPalette->paletteLog->palPalEntry;
&& hdc && hdc->realizedPalette && hdc->realizedPalette->paletteLog && hdc->realizedPalette->paletteLog->palPalEntry && hdc && hdc->realizedPalette && hdc->realizedPalette->paletteLog && hdc->realizedPalette->paletteLog->palPalEntry
&& hdc->realizedPalette->paletteLog->palNumEntries > 0 && iStart < hdc->realizedPalette->paletteLog->palNumEntries) { && hdc->realizedPalette->paletteLog->palNumEntries > 0 && iStart < hdc->realizedPalette->paletteLog->palNumEntries) {
PALETTEENTRY * palPalEntry = hdc->realizedPalette->paletteLog->palPalEntry; PALETTEENTRY * palPalEntry = hdc->realizedPalette->paletteLog->palPalEntry;

View file

@ -22,6 +22,7 @@ import android.provider.MediaStore;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
@ -45,8 +46,10 @@ import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -95,6 +98,15 @@ public class MainActivity extends AppCompatActivity
Print Print
} }
private int MRU_ID_START = 10000;
private int MAX_MRU = 5;
private LinkedHashMap<String, String> mruLinkedHashMap = new LinkedHashMap<String, String>(5, 1.0f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_MRU;
}
};
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -152,6 +164,15 @@ public class MainActivity extends AppCompatActivity
AssetManager assetManager = getResources().getAssets(); AssetManager assetManager = getResources().getAssets();
NativeLib.start(assetManager, mainScreenView.getBitmapMainScreen(), this, mainScreenView); NativeLib.start(assetManager, mainScreenView.getBitmapMainScreen(), this, mainScreenView);
Set<String> savedMRU = sharedPreferences.getStringSet("MRU", null);
if(savedMRU != null) {
for (String url : savedMRU) {
mruLinkedHashMap.put(url, null);
}
}
updateMRU();
updateFromPreferences(null, false); updateFromPreferences(null, false);
sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override @Override
@ -211,6 +232,25 @@ public class MainActivity extends AppCompatActivity
drawer.openDrawer(GravityCompat.START); drawer.openDrawer(GravityCompat.START);
} }
private void updateMRU() {
Menu menu = navigationView.getMenu();
MenuItem recentsMenuItem = menu.findItem(R.id.nav_item_recents);
SubMenu recentsSubMenu = null;
if(recentsMenuItem != null) {
recentsSubMenu = recentsMenuItem.getSubMenu();
if (recentsSubMenu != null)
recentsSubMenu.clear();
}
if (recentsSubMenu != null) {
Set<String> mruLinkedHashMapKeySet = mruLinkedHashMap.keySet();
String[] mrus = mruLinkedHashMapKeySet.toArray(new String[mruLinkedHashMapKeySet.size()]);
for (int i = mrus.length - 1; i >= 0; i--) {
String displayName = getFilenameFromURL(mrus[i]);
recentsSubMenu.add(Menu.NONE, MRU_ID_START + i, Menu.NONE, displayName);
}
}
}
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
@ -228,9 +268,15 @@ public class MainActivity extends AppCompatActivity
if(NativeLib.isDocumentAvailable() && sharedPreferences.getBoolean("settings_autosave", true)) { if(NativeLib.isDocumentAvailable() && sharedPreferences.getBoolean("settings_autosave", true)) {
String currentFilename = NativeLib.getCurrentFilename(); String currentFilename = NativeLib.getCurrentFilename();
if (currentFilename != null && currentFilename.length() > 0) { if (currentFilename != null && currentFilename.length() > 0) {
NativeLib.onFileSave(); if(NativeLib.onFileSave() == 1)
showAlert("State saved");
} }
} }
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("MRU", mruLinkedHashMap.keySet());
editor.apply();
super.onStop(); super.onStop();
} }
@ -342,6 +388,25 @@ public class MainActivity extends AppCompatActivity
OnTopics(); OnTopics();
} else if (id == R.id.nav_about) { } else if (id == R.id.nav_about) {
OnAbout(); OnAbout();
} else if(id >= MRU_ID_START && id < MRU_ID_START + MAX_MRU) {
Set<String> mruLinkedHashMapKeySet = mruLinkedHashMap.keySet();
int mruLength = mruLinkedHashMapKeySet.size();
String[] mrus = mruLinkedHashMapKeySet.toArray(new String[mruLength]);
int mruClickedIndex = id - MRU_ID_START;
final String url = mrus[mruClickedIndex];
mruLinkedHashMap.get(url);
ensureDocumentSaved(new Runnable() {
@Override
public void run() {
if(onFileOpen(url) != 0) {
saveLastDocument(url);
}
}
});
} }
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
@ -462,7 +527,8 @@ public class MainActivity extends AppCompatActivity
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) { if (which == DialogInterface.BUTTON_POSITIVE) {
if (hasFilename) { if (hasFilename) {
NativeLib.onFileSave(); if(NativeLib.onFileSave() == 1)
showAlert("State saved");
if (continueCallback != null) if (continueCallback != null)
continueCallback.run(); continueCallback.run();
} else { } else {
@ -529,7 +595,6 @@ public class MainActivity extends AppCompatActivity
}); });
} }
private void OnFileSave() { private void OnFileSave() {
//NativeLib.onFileSave();
ensureDocumentSaved(null); ensureDocumentSaved(null);
} }
private void OnFileSaveAs() { private void OnFileSaveAs() {
@ -703,6 +768,7 @@ public class MainActivity extends AppCompatActivity
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
String kmlScriptFilename = kmlScriptsForCurrentModel.get(which).filename; String kmlScriptFilename = kmlScriptsForCurrentModel.get(which).filename;
NativeLib.onViewScript(kmlScriptFilename); NativeLib.onViewScript(kmlScriptFilename);
displayKMLTitle();
showKMLLog(); showKMLLog();
updateNavigationDrawerItems(); updateNavigationDrawerItems();
} }
@ -738,6 +804,7 @@ public class MainActivity extends AppCompatActivity
String url = uri.toString(); String url = uri.toString();
if(NativeLib.onFileSaveAs(url) != 0) { if(NativeLib.onFileSaveAs(url) != 0) {
showAlert("State saved");
saveLastDocument(url); saveLastDocument(url);
makeUriPersistable(data, uri); makeUriPersistable(data, uri);
displayFilename(url); displayFilename(url);
@ -770,7 +837,10 @@ public class MainActivity extends AppCompatActivity
private void saveLastDocument(String url) { private void saveLastDocument(String url) {
SharedPreferences.Editor editor = sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("lastDocument", url); editor.putString("lastDocument", url);
editor.commit(); editor.apply();
mruLinkedHashMap.put(url, null);
updateMRU();
} }
private void makeUriPersistable(Intent data, Uri uri) { private void makeUriPersistable(Intent data, Uri uri) {
@ -788,19 +858,30 @@ public class MainActivity extends AppCompatActivity
} }
private void displayFilename(String url) { private void displayFilename(String url) {
String displayName = getFilenameFromURL(url);
View header = displayKMLTitle();
TextView textViewSubtitle = header.findViewById(R.id.nav_header_subtitle);
if(textViewSubtitle != null)
textViewSubtitle.setText(displayName);
}
private String getFilenameFromURL(String url) {
String displayName = ""; String displayName = "";
try { try {
displayName = SettingsActivity.getFileName(this, url); displayName = SettingsActivity.getFileName(this, url);
} catch(Exception e) { } catch(Exception e) {
// Do nothing
} }
return displayName;
}
private View displayKMLTitle() {
NavigationView navigationView = findViewById(R.id.nav_view); NavigationView navigationView = findViewById(R.id.nav_view);
View header = navigationView.getHeaderView(0); View header = navigationView.getHeaderView(0);
TextView textViewTitle = header.findViewById(R.id.nav_header_title); TextView textViewTitle = header.findViewById(R.id.nav_header_title);
if(textViewTitle != null) if(textViewTitle != null)
textViewTitle.setText(NativeLib.getKMLTitle()); textViewTitle.setText(NativeLib.getKMLTitle());
TextView textViewSubtitle = header.findViewById(R.id.nav_header_subtitle); return header;
if(textViewSubtitle != null)
textViewSubtitle.setText(displayName);
} }
private void showKMLLog() { private void showKMLLog() {
@ -858,8 +939,86 @@ public class MainActivity extends AppCompatActivity
} }
void showAlert(String text) { void showAlert(String text) {
Snackbar.make(getWindow().getDecorView().getRootView(), "text", Snackbar.LENGTH_LONG).setAction("Action", null).show(); Snackbar.make(findViewById(R.id.main_coordinator), text, Snackbar.LENGTH_SHORT).setAction("Action", null).show();
} }
void sendMenuItemCommand(int menuItem) {
switch (menuItem) {
case 1: // FILE_NEW
OnFileNew();
break;
case 2: // FILE_OPEN
OnFileOpen();
break;
case 3: // FILE_SAVE
OnFileSave();
break;
case 4: // FILE_SAVEAS
OnFileSaveAs();
break;
case 5: // FILE_EXIT
break;
case 6: // EDIT_COPY_SCREEN
OnViewCopy();
break;
case 7: // FILE_SETTINGS
OnSettings();
break;
case 8: // EDIT_RESET
OnViewReset();
break;
case 9: // EDIT_LOAD_OBJECT
OnObjectLoad();
break;
case 10: // EDIT_SAVE_OBJECT
OnObjectSave();
break;
case 11: // HELP_ABOUT
OnAbout();
break;
case 12: // HELP_TOPICS
OnTopics();
break;
case 13: // FILE_CLOSE
OnFileClose();
break;
case 14: // EDIT_BACKUP_SAVE
OnBackupSave();
break;
case 15: // EDIT_BACKUP_RESTORE
OnBackupRestore();
break;
case 16: // EDIT_BACKUP_DELETE
OnBackupDelete();
break;
case 17: // VIEW_SCRIPT
OnViewScript();
break;
case 18: // EDIT_PORT_CONFIGURATION
break;
case 19: // EDIT_COPY_STRING
OnStackCopy();
break;
case 20: // EDIT_PASTE_STRING
OnStackPaste();
break;
case 21: // TOOL_DISASM
break;
case 22: // TOOL_DEBUG
break;
case 23: // TOOL_MACRO_RECORD
break;
case 24: // TOOL_MACRO_PLAY
break;
case 25: // TOOL_MACRO_STOP
break;
case 26: // TOOL_MACRO_SETTINGS
break;
default:
break;
}
}
void clipboardCopyText(String text) { void clipboardCopyText(String text) {
// Gets a handle to the clipboard service. // Gets a handle to the clipboard service.
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

View file

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_coordinator"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".MainActivity"> tools:context=".MainActivity">

View file

@ -93,6 +93,12 @@ info *action
android:title="@string/action_settings" /> android:title="@string/action_settings" />
</group> </group>
<item android:id="@+id/nav_item_recents"
android:title="Recent">
<menu android:id="@+id/nav_menu_recents">
</menu>
</item>
<item android:title="Edit"> <item android:title="Edit">
<menu> <menu>
<item <item