Commit fde11639 authored by Bruno Coelho's avatar Bruno Coelho

Update example to include a swift and objc listener

parent eebdf499
...@@ -14,6 +14,11 @@ ...@@ -14,6 +14,11 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:id="@+id/actions"> android:id="@+id/actions">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset"
android:onClick="reset" />
<Button <Button
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -11,7 +11,8 @@ sort_order = enum { ...@@ -11,7 +11,8 @@ sort_order = enum {
sort_items = interface +c { sort_items = interface +c {
# For the iOS / Android demo # For the iOS / Android demo
sort(order: sort_order, items: item_list); sort(order: sort_order, items: item_list);
static create_with_listener(listener: textbox_listener): sort_items; reset();
static create_with_listener(listener: textbox_listener, reset_listener: textbox_reset_listener): sort_items;
# For the localhost / command-line demo # For the localhost / command-line demo
static run_sort(items: item_list): item_list; static run_sort(items: item_list): item_list;
...@@ -20,3 +21,7 @@ sort_items = interface +c { ...@@ -20,3 +21,7 @@ sort_items = interface +c {
textbox_listener = interface +j +o { textbox_listener = interface +j +o {
update(items: item_list); update(items: item_list);
} }
textbox_reset_listener = interface +j +o {
reset(text: string);
}
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
namespace textsort { namespace textsort {
class TextboxListener; class TextboxListener;
class TextboxResetListener;
enum class sort_order; enum class sort_order;
struct ItemList; struct ItemList;
...@@ -18,7 +19,9 @@ public: ...@@ -18,7 +19,9 @@ public:
/** For the iOS / Android demo */ /** For the iOS / Android demo */
virtual void sort(sort_order order, const ItemList & items) = 0; virtual void sort(sort_order order, const ItemList & items) = 0;
static std::shared_ptr<SortItems> create_with_listener(const std::shared_ptr<TextboxListener> & listener); virtual void reset() = 0;
static std::shared_ptr<SortItems> create_with_listener(const std::shared_ptr<TextboxListener> & listener, const std::shared_ptr<TextboxResetListener> & reset_listener);
/** For the localhost / command-line demo */ /** For the localhost / command-line demo */
static ItemList run_sort(const ItemList & items); static ItemList run_sort(const ItemList & items);
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#pragma once
#include <string>
namespace textsort {
class TextboxResetListener {
public:
virtual ~TextboxResetListener() {}
virtual void reset(const std::string & text) = 0;
};
} // namespace textsort
...@@ -11,8 +11,10 @@ import javax.annotation.Nonnull; ...@@ -11,8 +11,10 @@ import javax.annotation.Nonnull;
/** For the iOS / Android demo */ /** For the iOS / Android demo */
public abstract void sort(@Nonnull SortOrder order, @Nonnull ItemList items); public abstract void sort(@Nonnull SortOrder order, @Nonnull ItemList items);
public abstract void reset();
@CheckForNull @CheckForNull
public static native SortItems createWithListener(@CheckForNull TextboxListener listener); public static native SortItems createWithListener(@CheckForNull TextboxListener listener, @CheckForNull TextboxResetListener resetListener);
/** For the localhost / command-line demo */ /** For the localhost / command-line demo */
@Nonnull @Nonnull
...@@ -48,5 +50,13 @@ import javax.annotation.Nonnull; ...@@ -48,5 +50,13 @@ import javax.annotation.Nonnull;
native_sort(this.nativeRef, order, items); native_sort(this.nativeRef, order, items);
} }
private native void native_sort(long _nativeRef, SortOrder order, ItemList items); private native void native_sort(long _nativeRef, SortOrder order, ItemList items);
@Override
public void reset()
{
assert !this.destroyed.get() : "trying to use a destroyed object";
native_reset(this.nativeRef);
}
private native void native_reset(long _nativeRef);
} }
} }
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
package com.dropbox.textsort;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/*package*/ abstract class TextboxResetListener {
public abstract void reset(@Nonnull String text);
}
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "NativeItemList.hpp" #include "NativeItemList.hpp"
#include "NativeSortOrder.hpp" #include "NativeSortOrder.hpp"
#include "NativeTextboxListener.hpp" #include "NativeTextboxListener.hpp"
#include "NativeTextboxResetListener.hpp"
namespace djinni_generated { namespace djinni_generated {
...@@ -31,11 +32,21 @@ CJNIEXPORT void JNICALL Java_com_dropbox_textsort_SortItems_00024CppProxy_native ...@@ -31,11 +32,21 @@ CJNIEXPORT void JNICALL Java_com_dropbox_textsort_SortItems_00024CppProxy_native
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, ) } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, )
} }
CJNIEXPORT jobject JNICALL Java_com_dropbox_textsort_SortItems_createWithListener(JNIEnv* jniEnv, jobject /*this*/, jobject j_listener) CJNIEXPORT void JNICALL Java_com_dropbox_textsort_SortItems_00024CppProxy_native_1reset(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef)
{
try {
DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef);
const auto& ref = ::djinni::objectFromHandleAddress<::textsort::SortItems>(nativeRef);
ref->reset();
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, )
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_textsort_SortItems_createWithListener(JNIEnv* jniEnv, jobject /*this*/, jobject j_listener, jobject j_resetListener)
{ {
try { try {
DJINNI_FUNCTION_PROLOGUE0(jniEnv); DJINNI_FUNCTION_PROLOGUE0(jniEnv);
auto r = ::textsort::SortItems::create_with_listener(::djinni_generated::NativeTextboxListener::toCpp(jniEnv, j_listener)); auto r = ::textsort::SortItems::create_with_listener(::djinni_generated::NativeTextboxListener::toCpp(jniEnv, j_listener),
::djinni_generated::NativeTextboxResetListener::toCpp(jniEnv, j_resetListener));
return ::djinni::release(::djinni_generated::NativeSortItems::fromCpp(jniEnv, r)); return ::djinni::release(::djinni_generated::NativeSortItems::fromCpp(jniEnv, r));
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
} }
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#include "NativeTextboxResetListener.hpp" // my header
#include "Marshal.hpp"
namespace djinni_generated {
NativeTextboxResetListener::NativeTextboxResetListener() : ::djinni::JniInterface<::textsort::TextboxResetListener, NativeTextboxResetListener>() {}
NativeTextboxResetListener::~NativeTextboxResetListener() = default;
NativeTextboxResetListener::JavaProxy::JavaProxy(JniType j) : Handle(::djinni::jniGetThreadEnv(), j) { }
NativeTextboxResetListener::JavaProxy::~JavaProxy() = default;
void NativeTextboxResetListener::JavaProxy::reset(const std::string & c_text) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeTextboxResetListener>::get();
jniEnv->CallVoidMethod(Handle::get().get(), data.method_reset,
::djinni::get(::djinni::String::fromCpp(jniEnv, c_text)));
::djinni::jniExceptionCheck(jniEnv);
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#pragma once
#include "djinni_support.hpp"
#include "textbox_reset_listener.hpp"
namespace djinni_generated {
class NativeTextboxResetListener final : ::djinni::JniInterface<::textsort::TextboxResetListener, NativeTextboxResetListener> {
public:
using CppType = std::shared_ptr<::textsort::TextboxResetListener>;
using CppOptType = std::shared_ptr<::textsort::TextboxResetListener>;
using JniType = jobject;
using Boxed = NativeTextboxResetListener;
~NativeTextboxResetListener();
static CppType toCpp(JNIEnv* jniEnv, JniType j) { return ::djinni::JniClass<NativeTextboxResetListener>::get()._fromJava(jniEnv, j); }
static ::djinni::LocalRef<JniType> fromCppOpt(JNIEnv* jniEnv, const CppOptType& c) { return {jniEnv, ::djinni::JniClass<NativeTextboxResetListener>::get()._toJava(jniEnv, c)}; }
static ::djinni::LocalRef<JniType> fromCpp(JNIEnv* jniEnv, const CppType& c) { return fromCppOpt(jniEnv, c); }
private:
NativeTextboxResetListener();
friend ::djinni::JniClass<NativeTextboxResetListener>;
friend ::djinni::JniInterface<::textsort::TextboxResetListener, NativeTextboxResetListener>;
class JavaProxy final : ::djinni::JavaProxyHandle<JavaProxy>, public ::textsort::TextboxResetListener
{
public:
JavaProxy(JniType j);
~JavaProxy();
void reset(const std::string & text) override;
private:
friend ::djinni::JniInterface<::textsort::TextboxResetListener, ::djinni_generated::NativeTextboxResetListener>;
};
const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/textsort/TextboxResetListener") };
const jmethodID method_reset { ::djinni::jniGetMethodID(clazz.get(), "reset", "(Ljava/lang/String;)V") };
};
} // namespace djinni_generated
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#import "TXSItemList+Private.h" #import "TXSItemList+Private.h"
#import "TXSSortOrder+Private.h" #import "TXSSortOrder+Private.h"
#import "TXSTextboxListener+Private.h" #import "TXSTextboxListener+Private.h"
#import "TXSTextboxResetListener+Private.h"
#include <exception> #include <exception>
#include <stdexcept> #include <stdexcept>
#include <utility> #include <utility>
...@@ -40,9 +41,17 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th ...@@ -40,9 +41,17 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS() } DJINNI_TRANSLATE_EXCEPTIONS()
} }
+ (nullable TXSSortItems *)createWithListener:(nullable id<TXSTextboxListener>)listener { - (void)reset {
try { try {
auto objcpp_result_ = ::textsort::SortItems::create_with_listener(::djinni_generated::TextboxListener::toCpp(listener)); _cppRefHandle.get()->reset();
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (nullable TXSSortItems *)createWithListener:(nullable id<TXSTextboxListener>)listener
resetListener:(nullable id<TXSTextboxResetListener>)resetListener {
try {
auto objcpp_result_ = ::textsort::SortItems::create_with_listener(::djinni_generated::TextboxListener::toCpp(listener),
::djinni_generated::TextboxResetListener::toCpp(resetListener));
return ::djinni_generated::SortItems::fromCpp(objcpp_result_); return ::djinni_generated::SortItems::fromCpp(objcpp_result_);
} DJINNI_TRANSLATE_EXCEPTIONS() } DJINNI_TRANSLATE_EXCEPTIONS()
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@class TXSSortItems; @class TXSSortItems;
@protocol TXSTextboxListener; @protocol TXSTextboxListener;
@protocol TXSTextboxResetListener;
@interface TXSSortItems : NSObject @interface TXSSortItems : NSObject
...@@ -14,7 +15,10 @@ ...@@ -14,7 +15,10 @@
- (void)sort:(TXSSortOrder)order - (void)sort:(TXSSortOrder)order
items:(nonnull TXSItemList *)items; items:(nonnull TXSItemList *)items;
+ (nullable TXSSortItems *)createWithListener:(nullable id<TXSTextboxListener>)listener; - (void)reset;
+ (nullable TXSSortItems *)createWithListener:(nullable id<TXSTextboxListener>)listener
resetListener:(nullable id<TXSTextboxResetListener>)resetListener;
/** For the localhost / command-line demo */ /** For the localhost / command-line demo */
+ (nonnull TXSItemList *)runSort:(nonnull TXSItemList *)items; + (nonnull TXSItemList *)runSort:(nonnull TXSItemList *)items;
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#include "textbox_reset_listener.hpp"
#include <memory>
static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file");
@protocol TXSTextboxResetListener;
namespace djinni_generated {
class TextboxResetListener
{
public:
using CppType = std::shared_ptr<::textsort::TextboxResetListener>;
using CppOptType = std::shared_ptr<::textsort::TextboxResetListener>;
using ObjcType = id<TXSTextboxResetListener>;
using Boxed = TextboxResetListener;
static CppType toCpp(ObjcType objc);
static ObjcType fromCppOpt(const CppOptType& cpp);
static ObjcType fromCpp(const CppType& cpp) { return fromCppOpt(cpp); }
private:
class ObjcProxy;
};
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#import "TXSTextboxResetListener+Private.h"
#import "TXSTextboxResetListener.h"
#import "DJIMarshal+Private.h"
#import "DJIObjcWrapperCache+Private.h"
#include <stdexcept>
static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file");
namespace djinni_generated {
class TextboxResetListener::ObjcProxy final
: public ::textsort::TextboxResetListener
, private ::djinni::ObjcProxyBase<ObjcType>
{
friend class ::djinni_generated::TextboxResetListener;
public:
using ObjcProxyBase::ObjcProxyBase;
void reset(const std::string & c_text) override
{
@autoreleasepool {
[djinni_private_get_proxied_objc_object() reset:(::djinni::String::fromCpp(c_text))];
}
}
};
} // namespace djinni_generated
namespace djinni_generated {
auto TextboxResetListener::toCpp(ObjcType objc) -> CppType
{
if (!objc) {
return nullptr;
}
return ::djinni::get_objc_proxy<ObjcProxy>(objc);
}
auto TextboxResetListener::fromCppOpt(const CppOptType& cpp) -> ObjcType
{
if (!cpp) {
return nil;
}
return dynamic_cast<ObjcProxy&>(*cpp).djinni_private_get_proxied_objc_object();
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from example.djinni
#import <Foundation/Foundation.h>
@protocol TXSTextboxResetListener
- (void)reset:(nonnull NSString *)text;
@end
...@@ -5,3 +5,4 @@ ...@@ -5,3 +5,4 @@
#import "TXSSortOrder.h" #import "TXSSortOrder.h"
#import "TXSSortItems.h" #import "TXSSortItems.h"
#import "TXSTextboxListener.h" #import "TXSTextboxListener.h"
#import "TXSTextboxResetListener.h"
...@@ -8,12 +8,22 @@ ...@@ -8,12 +8,22 @@
namespace textsort { namespace textsort {
std::shared_ptr<SortItems> SortItems::create_with_listener(const std::shared_ptr<TextboxListener>& listener) { std::shared_ptr<SortItems> SortItems::create_with_listener(const std::shared_ptr<TextboxListener> & listener, const std::shared_ptr<TextboxResetListener> & reset_listener) {
return std::make_shared<SortItemsImpl>(listener); return std::make_shared<SortItemsImpl>(listener, reset_listener);
} }
SortItemsImpl::SortItemsImpl (const std::shared_ptr<TextboxListener> & listener) { SortItemsImpl::SortItemsImpl (const std::shared_ptr<TextboxListener> & listener, const std::shared_ptr<TextboxResetListener> & reset_listener) {
this->m_listener = listener; this->m_listener = listener;
this->m_reset_listener = reset_listener;
}
void SortItemsImpl::reset() {
std::string resetText = "Type the lines to sort";
// Pass result to client interface
this->m_reset_listener->reset(resetText);
} }
void SortItemsImpl::sort(sort_order order, const ItemList & items) { void SortItemsImpl::sort(sort_order order, const ItemList & items) {
......
...@@ -2,17 +2,20 @@ ...@@ -2,17 +2,20 @@
#include "sort_items.hpp" #include "sort_items.hpp"
#include "textbox_listener.hpp" #include "textbox_listener.hpp"
#include "textbox_reset_listener.hpp"
namespace textsort { namespace textsort {
class SortItemsImpl : public SortItems { class SortItemsImpl : public SortItems {
public: public:
SortItemsImpl(const std::shared_ptr<TextboxListener> & listener); SortItemsImpl(const std::shared_ptr<TextboxListener> & listener, const std::shared_ptr<TextboxResetListener> & reset_listener);
virtual void reset() override;
virtual void sort(sort_order order, const ItemList & items) override; virtual void sort(sort_order order, const ItemList & items) override;
private: private:
std::shared_ptr<TextboxListener> m_listener; std::shared_ptr<TextboxListener> m_listener;
std::shared_ptr<TextboxResetListener> m_reset_listener;
}; };
......
...@@ -13,6 +13,7 @@ public class MainActivity extends Activity { ...@@ -13,6 +13,7 @@ public class MainActivity extends Activity {
private EditText text; private EditText text;
private SortItems sortItemsInterface; private SortItems sortItemsInterface;
private TextboxListener textboxListener; private TextboxListener textboxListener;
private TextboxResetListener textboxResetListener;
static { static {
System.loadLibrary("textsort_jni"); System.loadLibrary("textsort_jni");
...@@ -25,8 +26,13 @@ public class MainActivity extends Activity { ...@@ -25,8 +26,13 @@ public class MainActivity extends Activity {
text = (EditText) findViewById(R.id.editText); text = (EditText) findViewById(R.id.editText);
textboxListener = new TextboxListenerImpl(text); textboxListener = new TextboxListenerImpl(text);
textboxResetListener = new TextboxResetListenerImpl(text);
// Call JNI to initiate the SortItems object from the given textboxListener and translate to Java // Call JNI to initiate the SortItems object from the given textboxListener and translate to Java
sortItemsInterface = SortItems.createWithListener(textboxListener); sortItemsInterface = SortItems.createWithListener(textboxListener, textboxResetListener);
}
public void reset(View view) {
sortItemsInterface.reset();
} }
public void sort(SortOrder order) { public void sort(SortOrder order) {
......
package com.dropbox.textsort;
import android.widget.EditText;
public class TextboxResetListenerImpl extends TextboxResetListener {
private EditText mTextArea;
public TextboxResetListenerImpl(EditText textArea) {
this.mTextArea = textArea;
}
@Override
public void reset(String text) {
mTextArea.setText(text);
}
}
#import "TXSItemList.h" #import "TXSItemList.h"
#import "TXSSortItems.h" #import "TXSSortItems.h"
#import "TextSort-Swift.h" #import "TXSTextboxListenerImpl.h"
#import "TXSViewController.h" #import "TXSViewController.h"
#import "TXSTextboxListener.h" #import "TextSort-Swift.h"
#import <QuartzCore/QuartzCore.h> #import <QuartzCore/QuartzCore.h>
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
@implementation TXSViewController { @implementation TXSViewController {
TXSSortItems* _sortItemInterface; TXSSortItems* _sortItemInterface;
id <TXSTextboxListener> _textboxListener; id <TXSTextboxListener> _textboxListener;
id <TXSTextboxResetListener> _textboxResetListener;
} }
- (void)viewDidLoad - (void)viewDidLoad
...@@ -35,7 +36,13 @@ ...@@ -35,7 +36,13 @@
// Create the Objective-C TXSTextboxListener // Create the Objective-C TXSTextboxListener
_textboxListener = [[TXSTextboxListenerImpl alloc] initWithUITextView:self.textView]; _textboxListener = [[TXSTextboxListenerImpl alloc] initWithUITextView:self.textView];
_sortItemInterface = [TXSSortItems createWithListener:_textboxListener]; _textboxResetListener = [[TXSTextboxResetListenerImpl alloc] initWithUITextView:self.textView];
_sortItemInterface = [TXSSortItems createWithListener:_textboxListener resetListener:_textboxResetListener];
}
- (IBAction)reset:(id)sender
{
[_sortItemInterface reset];
} }
- (IBAction)sort:(id)sender - (IBAction)sort:(id)sender
......
//
// TXSTextboxListenerImpl.swift
// TextSort
//
// Created by Bruno Coelho on 10/03/2017.
// Copyright © 2017 Dropbox, Inc. All rights reserved.
//
import UIKit import UIKit
@objc class TXSTextboxListenerImpl : NSObject, TXSTextboxListener { @objc class TXSTextboxResetListenerImpl : NSObject, TXSTextboxResetListener {
private var textView_: UITextView private var textView_: UITextView
@objc(initWithUITextView:) @objc(initWithUITextView:)
...@@ -16,7 +8,7 @@ import UIKit ...@@ -16,7 +8,7 @@ import UIKit
textView_ = textView textView_ = textView
} }
@objc func update(_ items: TXSItemList) { func reset(_ text: String) {
textView_.text = items.items.joined(separator: "\n") textView_.text = text
} }
} }
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
65D7FDFB19AD0CDF0038F82F /* TXSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF519AD0CDF0038F82F /* TXSAppDelegate.m */; }; 65D7FDFB19AD0CDF0038F82F /* TXSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF519AD0CDF0038F82F /* TXSAppDelegate.m */; };
65D7FDFC19AD0CDF0038F82F /* TXSTextboxListenerImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF719AD0CDF0038F82F /* TXSTextboxListenerImpl.m */; }; 65D7FDFC19AD0CDF0038F82F /* TXSTextboxListenerImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF719AD0CDF0038F82F /* TXSTextboxListenerImpl.m */; };
65D7FDFD19AD0CDF0038F82F /* TXSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF919AD0CDF0038F82F /* TXSViewController.m */; }; 65D7FDFD19AD0CDF0038F82F /* TXSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7FDF919AD0CDF0038F82F /* TXSViewController.m */; };
A546A26E1E72FBAF004A8BBD /* TXSTextboxListenerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A546A26D1E72FBAF004A8BBD /* TXSTextboxListenerImpl.swift */; }; A546A26E1E72FBAF004A8BBD /* TXSTextboxResetListenerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A546A26D1E72FBAF004A8BBD /* TXSTextboxResetListenerImpl.swift */; };
B003051919B70561008E1F67 /* libdjinni_objc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B003051819B70561008E1F67 /* libdjinni_objc.a */; }; B003051919B70561008E1F67 /* libdjinni_objc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B003051819B70561008E1F67 /* libdjinni_objc.a */; };
B097B6BC19B1C07E0047653A /* libtextsort_objc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B097B6BB19B1C07E0047653A /* libtextsort_objc.a */; }; B097B6BC19B1C07E0047653A /* libtextsort_objc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B097B6BB19B1C07E0047653A /* libtextsort_objc.a */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
65D7FDF719AD0CDF0038F82F /* TXSTextboxListenerImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TXSTextboxListenerImpl.m; sourceTree = "<group>"; }; 65D7FDF719AD0CDF0038F82F /* TXSTextboxListenerImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TXSTextboxListenerImpl.m; sourceTree = "<group>"; };
65D7FDF819AD0CDF0038F82F /* TXSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TXSViewController.h; sourceTree = "<group>"; }; 65D7FDF819AD0CDF0038F82F /* TXSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TXSViewController.h; sourceTree = "<group>"; };
65D7FDF919AD0CDF0038F82F /* TXSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TXSViewController.m; sourceTree = "<group>"; }; 65D7FDF919AD0CDF0038F82F /* TXSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TXSViewController.m; sourceTree = "<group>"; };
A546A26D1E72FBAF004A8BBD /* TXSTextboxListenerImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TXSTextboxListenerImpl.swift; path = "../handwritten-src/swift/TXSTextboxListenerImpl.swift"; sourceTree = "<group>"; }; A546A26D1E72FBAF004A8BBD /* TXSTextboxResetListenerImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TXSTextboxResetListenerImpl.swift; path = "../handwritten-src/swift/TXSTextboxResetListenerImpl.swift"; sourceTree = "<group>"; };
B003051819B70561008E1F67 /* libdjinni_objc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libdjinni_objc.a; path = "../../support-lib/build/Debug-iphoneos/libdjinni_objc.a"; sourceTree = "<group>"; }; B003051819B70561008E1F67 /* libdjinni_objc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libdjinni_objc.a; path = "../../support-lib/build/Debug-iphoneos/libdjinni_objc.a"; sourceTree = "<group>"; };
B097B6BB19B1C07E0047653A /* libtextsort_objc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtextsort_objc.a; path = "../../build/Debug-iphoneos/libtextsort_objc.a"; sourceTree = "<group>"; }; B097B6BB19B1C07E0047653A /* libtextsort_objc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtextsort_objc.a; path = "../../build/Debug-iphoneos/libtextsort_objc.a"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
A546A26A1E72F967004A8BBD /* handwritten-swift */ = { A546A26A1E72F967004A8BBD /* handwritten-swift */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A546A26D1E72FBAF004A8BBD /* TXSTextboxListenerImpl.swift */, A546A26D1E72FBAF004A8BBD /* TXSTextboxResetListenerImpl.swift */,
); );
name = "handwritten-swift"; name = "handwritten-swift";
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
65D7FDFC19AD0CDF0038F82F /* TXSTextboxListenerImpl.m in Sources */, 65D7FDFC19AD0CDF0038F82F /* TXSTextboxListenerImpl.m in Sources */,
65D7FDFB19AD0CDF0038F82F /* TXSAppDelegate.m in Sources */, 65D7FDFB19AD0CDF0038F82F /* TXSAppDelegate.m in Sources */,
65D7FDFD19AD0CDF0038F82F /* TXSViewController.m in Sources */, 65D7FDFD19AD0CDF0038F82F /* TXSViewController.m in Sources */,
A546A26E1E72FBAF004A8BBD /* TXSTextboxListenerImpl.swift in Sources */, A546A26E1E72FBAF004A8BBD /* TXSTextboxResetListenerImpl.swift in Sources */,
65D7FDFA19AD0CDF0038F82F /* main.mm in Sources */, 65D7FDFA19AD0CDF0038F82F /* main.mm in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7531" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="vXZ-lx-hvc"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="vXZ-lx-hvc">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7520"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/> <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<scenes> <scenes>
<!--View Controller--> <!--View Controller-->
...@@ -15,48 +19,57 @@ ...@@ -15,48 +19,57 @@
<viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/> <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
</layoutGuides> </layoutGuides>
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS"> <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="Type the lines to sort" translatesAutoresizingMaskIntoConstraints="NO" id="GOB-Ok-Z2R"> <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" text="Type the lines to sort" translatesAutoresizingMaskIntoConstraints="NO" id="GOB-Ok-Z2R">
<rect key="frame" x="16" y="28" width="288" height="482"/> <rect key="frame" x="16" y="28" width="343" height="581"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/> <fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView> </textView>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A93-rB-AZ4"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A93-rB-AZ4">
<rect key="frame" x="54" y="518" width="60" height="30"/> <rect key="frame" x="106" y="617" width="30" height="30"/>
<state key="normal" title="Sort"> <state key="normal" title="Sort">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state> </state>
<connections> <connections>
<action selector="sort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="JmD-7I-e8t"/> <action selector="sort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="JmD-7I-e8t"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="81n-2H-7fH"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="81n-2H-7fH">
<rect key="frame" x="104" y="518" width="113" height="30"/> <rect key="frame" x="144" y="617" width="88" height="30"/>
<state key="normal" title="Reverse Sort"> <state key="normal" title="Reverse Sort">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state> </state>
<connections> <connections>
<action selector="reverseSort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="3ph-FD-T7F"/> <action selector="reverseSort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="3ph-FD-T7F"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cv7-dA-P8a"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cv7-dA-P8a">
<rect key="frame" x="225" y="518" width="60" height="30"/> <rect key="frame" x="240" y="617" width="57" height="30"/>
<state key="normal" title="Random"> <state key="normal" title="Random">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state> </state>
<connections> <connections>
<action selector="randomSort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="Qm2-PQ-ghk"/> <action selector="randomSort:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="Qm2-PQ-ghk"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ujE-Fh-KYB">
<rect key="frame" x="58" y="617" width="39" height="30"/>
<state key="normal" title="Reset"/>
<connections>
<action selector="reset:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="aYB-V7-80Y"/>
</connections>
</button>
</subviews> </subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints> <constraints>
<constraint firstItem="ujE-Fh-KYB" firstAttribute="top" secondItem="A93-rB-AZ4" secondAttribute="top" id="4FY-bm-lFV"/>
<constraint firstItem="cv7-dA-P8a" firstAttribute="leading" secondItem="81n-2H-7fH" secondAttribute="trailing" constant="8" id="6k6-kS-Uv4"/> <constraint firstItem="cv7-dA-P8a" firstAttribute="leading" secondItem="81n-2H-7fH" secondAttribute="trailing" constant="8" id="6k6-kS-Uv4"/>
<constraint firstItem="81n-2H-7fH" firstAttribute="baseline" secondItem="cv7-dA-P8a" secondAttribute="baseline" id="EDF-c5-6UY"/> <constraint firstItem="81n-2H-7fH" firstAttribute="baseline" secondItem="cv7-dA-P8a" secondAttribute="baseline" id="EDF-c5-6UY"/>
<constraint firstItem="GOB-Ok-Z2R" firstAttribute="trailing" secondItem="kh9-bI-dsS" secondAttribute="trailingMargin" id="FcW-gp-TKr"/> <constraint firstItem="GOB-Ok-Z2R" firstAttribute="trailing" secondItem="kh9-bI-dsS" secondAttribute="trailingMargin" id="FcW-gp-TKr"/>
<constraint firstItem="A93-rB-AZ4" firstAttribute="leading" secondItem="ujE-Fh-KYB" secondAttribute="trailing" constant="9" id="Fhe-NE-isa"/>
<constraint firstItem="cv7-dA-P8a" firstAttribute="top" secondItem="GOB-Ok-Z2R" secondAttribute="bottom" constant="8" id="LWK-fr-cJv"/> <constraint firstItem="cv7-dA-P8a" firstAttribute="top" secondItem="GOB-Ok-Z2R" secondAttribute="bottom" constant="8" id="LWK-fr-cJv"/>
<constraint firstItem="81n-2H-7fH" firstAttribute="leading" secondItem="A93-rB-AZ4" secondAttribute="trailing" constant="8" id="M4F-4D-BXj"/> <constraint firstItem="81n-2H-7fH" firstAttribute="leading" secondItem="A93-rB-AZ4" secondAttribute="trailing" constant="8" id="M4F-4D-BXj"/>
<constraint firstItem="2fi-mo-0CV" firstAttribute="top" secondItem="81n-2H-7fH" secondAttribute="bottom" constant="20" id="Skf-gJ-Pvn"/> <constraint firstItem="2fi-mo-0CV" firstAttribute="top" secondItem="81n-2H-7fH" secondAttribute="bottom" constant="20" id="Skf-gJ-Pvn"/>
...@@ -79,6 +92,6 @@ ...@@ -79,6 +92,6 @@
<simulatedMetricsContainer key="defaultSimulatedMetrics"> <simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/> <simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/> <simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/> <simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
</simulatedMetricsContainer> </simulatedMetricsContainer>
</document> </document>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment