Initial commit
@@ -1,8 +0,0 @@
|
||||
requireExtension 'autocomplete'
|
||||
requireExtension 'strip-trailing-whitespace'
|
||||
requireExtension 'fuzzy-finder'
|
||||
requireExtension 'tree-view'
|
||||
requireExtension 'command-panel'
|
||||
requireExtension 'keybindings-view'
|
||||
requireExtension 'snippets'
|
||||
requireExtension 'status-bar'
|
||||
@@ -1,34 +0,0 @@
|
||||
snippet de "Describe block"
|
||||
describe "${1:description}", ->
|
||||
${2:body}
|
||||
endsnippet
|
||||
|
||||
snippet i "It block"
|
||||
it "$1", ->
|
||||
$2
|
||||
endsnippet
|
||||
|
||||
snippet be "Before each"
|
||||
beforeEach ->
|
||||
$1
|
||||
endsnippet
|
||||
|
||||
snippet ex "Expectation"
|
||||
expect($1).to$2
|
||||
endsnippet
|
||||
|
||||
snippet log "Console log"
|
||||
console.log $1
|
||||
endsnippet
|
||||
|
||||
snippet ra "Range array"
|
||||
[[$1, $2], [$3, $4]]
|
||||
endsnippet
|
||||
|
||||
snippet pt "Point array"
|
||||
[$1, $2]
|
||||
endsnippet
|
||||
|
||||
snippet spy "Jasmine spy"
|
||||
jasmine.createSpy("${1:description}")$2
|
||||
endsnippet
|
||||
@@ -1,22 +1,2 @@
|
||||
# Xcode
|
||||
build/*
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
*.xcworkspace
|
||||
!default.xcworkspace
|
||||
xcuserdata
|
||||
profile
|
||||
*.moved-aside
|
||||
.DS_Store
|
||||
tags
|
||||
atom-build
|
||||
pkg
|
||||
|
||||
# Eclipse
|
||||
.project
|
||||
.svn
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
pairs:
|
||||
ns: Nathan Sobo; nathan
|
||||
cj: Corey Johnson; cj
|
||||
dg: David Graham; dgraham
|
||||
ks: Kevin Sawicki; kevin
|
||||
email:
|
||||
domain: github.com
|
||||
#global: true
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# This file is an addendum to the Chromium AUTHORS file.
|
||||
# Names should be added to this file like so:
|
||||
# Name or Organization <email address>
|
||||
|
||||
Marshall Greenblatt <magreenblatt@gmail.com>
|
||||
Jamie Kirkpatrick <jkp@spotify.com>
|
||||
Johan Lindström <johanl@spotify.com>
|
||||
Igor Pavlov <igor.arabesc.pavlov@gmail.com>
|
||||
Yanko Yankov <yyankov@gmail.com>
|
||||
Emerick Rogul <emerick@gmail.com>
|
||||
Valve Corporation <mac@valvesoftware.com>
|
||||
Anthony Taranto <anthony.taranto@gmail.com>
|
||||
Joe Andrieu <joe@joeandrieu.com>
|
||||
Keith Poole <platima@gmail.com>
|
||||
Aviv Rind <avivrind@gmail.com>
|
||||
Michael Kaminski <mikeyk730@gmail.com>
|
||||
ADInstruments Ltd. <dev.team@adinstruments.com>
|
||||
Gus Verdun <gusverdun@gmail.com>
|
||||
Joinerysoft Ltd. <cpinfold@joinerysoft.com>
|
||||
Johan Björk <phb@spotify.com>
|
||||
Dmitry Azaraev <dmitry.azaraev@gmail.com>
|
||||
David Xue <ddxue27@gmail.com>
|
||||
Russell (Rusty) Richards <fe3o4y@gmail.com>
|
||||
Brian Power <powerbf.it@gmail.com>
|
||||
Corey Lucier <clucier@adobe.com>
|
||||
Mihai Tica <mitica@adobe.com>
|
||||
@@ -1,2 +0,0 @@
|
||||
/atom
|
||||
*.o
|
||||
@@ -1,93 +0,0 @@
|
||||
INSTALLDIR=/usr/share/atom
|
||||
|
||||
CXXFLAGS := -Werror \
|
||||
-pthread \
|
||||
-fno-exceptions \
|
||||
-fno-strict-aliasing \
|
||||
-Wall \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-missing-field-initializers \
|
||||
-fvisibility=hidden \
|
||||
-pipe \
|
||||
-fPIC \
|
||||
-pthread \
|
||||
-D_REENTRANT \
|
||||
-I/usr/include/gtk-2.0 \
|
||||
-I/usr/lib/gtk-2.0/include \
|
||||
-I/usr/include/atk-1.0 \
|
||||
-I/usr/include/cairo \
|
||||
-I/usr/include/pango-1.0 \
|
||||
-I/usr/include/gio-unix-2.0/ \
|
||||
-I/usr/include/glib-2.0 \
|
||||
-I/usr/include/openssl \
|
||||
-I/usr/lib/glib-2.0/include \
|
||||
-I../cef \
|
||||
-O2 \
|
||||
-fno-ident \
|
||||
-fdata-sections \
|
||||
-ffunction-sections \
|
||||
-fno-rtti \
|
||||
-fno-threadsafe-statics \
|
||||
-fvisibility-inlines-hidden \
|
||||
-Wsign-compare
|
||||
|
||||
LDFLAGS := -pthread \
|
||||
-Wl,-z,noexecstack \
|
||||
-fPIC \
|
||||
-Llib \
|
||||
-Wl,-O1 \
|
||||
-Wl,--as-needed \
|
||||
-Wl,--gc-sections \
|
||||
-Wl,-rpath=$(INSTALLDIR)
|
||||
|
||||
LIBS := -lX11 \
|
||||
-lgtk-x11-2.0 \
|
||||
-lgdk-x11-2.0 \
|
||||
-latk-1.0 \
|
||||
-lgio-2.0 \
|
||||
-lpangoft2-1.0 \
|
||||
-lgdk_pixbuf-2.0 \
|
||||
-lm \
|
||||
-lpangocairo-1.0 \
|
||||
-lcairo \
|
||||
-lpango-1.0 \
|
||||
-lgobject-2.0 \
|
||||
-lgmodule-2.0 \
|
||||
-lgthread-2.0 \
|
||||
-lrt \
|
||||
-lglib-2.0 \
|
||||
-lssl \
|
||||
-lcrypto \
|
||||
-lcef \
|
||||
-lcef_dll_wrapper \
|
||||
-lonig
|
||||
|
||||
SOURCES=atom.cpp native_handler.cpp client_handler.cpp onig_regexp_extension.cpp io_utils.cpp
|
||||
OBJECTS=$(SOURCES:.cpp=.o)
|
||||
|
||||
all:
|
||||
g++ $(CXXFLAGS) -c $(SOURCES)
|
||||
g++ -o atom $(OBJECTS) $(LDFLAGS) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -rf atom *.o
|
||||
|
||||
install:
|
||||
mkdir -p $(INSTALLDIR)
|
||||
cp atom $(INSTALLDIR)
|
||||
cp chrome.pak $(INSTALLDIR)
|
||||
cp -R locales $(INSTALLDIR)
|
||||
cp atom.png $(INSTALLDIR)
|
||||
cp lib/libcef.so $(INSTALLDIR)
|
||||
cp lib/libcef_dll_wrapper.a $(INSTALLDIR)
|
||||
cp -R ../src $(INSTALLDIR)
|
||||
cp -R ../static $(INSTALLDIR)
|
||||
cp -R ../vendor $(INSTALLDIR)
|
||||
cp -R ../bundles $(INSTALLDIR)
|
||||
cp -R ../themes $(INSTALLDIR)
|
||||
cp ../index.html $(INSTALLDIR)
|
||||
coffee -c -o $(INSTALLDIR)/src/stdlib ../src/stdlib/require.coffee
|
||||
ln -sf $(INSTALLDIR)/atom /usr/local/bin/atom
|
||||
|
||||
spec-install: install
|
||||
cp -R ../spec $(INSTALLDIR)
|
||||
@@ -1,160 +0,0 @@
|
||||
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <unistd.h>
|
||||
#include <string>
|
||||
#include "atom.h"
|
||||
#include "include/cef_app.h"
|
||||
#include "include/cef_browser.h"
|
||||
#include "include/cef_frame.h"
|
||||
#include "include/cef_runnable.h"
|
||||
#include "client_handler.h"
|
||||
#include "onig_regexp_extension.h"
|
||||
#include "io_utils.h"
|
||||
|
||||
char* szWorkingDir; // The current working directory
|
||||
|
||||
const char* szPath; // The folder the application is in
|
||||
|
||||
const char* szPathToOpen; // The file to open
|
||||
|
||||
CefRefPtr<ClientHandler> g_handler;
|
||||
|
||||
void AppGetSettings(CefSettings& settings, CefRefPtr<CefApp>& app) {
|
||||
CefString(&settings.cache_path) = "";
|
||||
CefString(&settings.user_agent) = "";
|
||||
CefString(&settings.product_version) = "";
|
||||
CefString(&settings.locale) = "";
|
||||
CefString(&settings.log_file) = "";
|
||||
CefString(&settings.javascript_flags) = "";
|
||||
|
||||
settings.log_severity = LOGSEVERITY_ERROR;
|
||||
settings.local_storage_quota = 0;
|
||||
settings.session_storage_quota = 0;
|
||||
}
|
||||
|
||||
void destroy(void) {
|
||||
CefQuitMessageLoop();
|
||||
}
|
||||
|
||||
void TerminationSignalHandler(int signatl) {
|
||||
destroy();
|
||||
}
|
||||
|
||||
// WebViewDelegate::TakeFocus in the test webview delegate.
|
||||
static gboolean HandleFocus(GtkWidget* widget, GdkEventFocus* focus) {
|
||||
if (g_handler.get() && g_handler->GetBrowserHwnd()) {
|
||||
// Give focus to the browser window.
|
||||
g_handler->GetBrowser()->SetFocus(true);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
szWorkingDir = get_current_dir_name();
|
||||
if (szWorkingDir == NULL)
|
||||
return -1;
|
||||
|
||||
std::string appDir = io_util_app_directory();
|
||||
if (appDir.empty())
|
||||
return -1;
|
||||
|
||||
szPath = appDir.c_str();
|
||||
|
||||
std::string pathToOpen;
|
||||
if (argc >= 2) {
|
||||
if (argv[1][0] != '/') {
|
||||
pathToOpen.append(szWorkingDir);
|
||||
pathToOpen.append("/");
|
||||
pathToOpen.append(argv[1]);
|
||||
} else
|
||||
pathToOpen.append(argv[1]);
|
||||
} else
|
||||
pathToOpen.append(szWorkingDir);
|
||||
szPathToOpen = pathToOpen.c_str();
|
||||
|
||||
GtkWidget* window;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
CefSettings settings;
|
||||
CefRefPtr<CefApp> app;
|
||||
|
||||
AppGetSettings(settings, app);
|
||||
CefInitialize(settings, app);
|
||||
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title(GTK_WINDOW(window), "atom");
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
|
||||
gtk_window_maximize(GTK_WINDOW(window));
|
||||
|
||||
g_signal_connect(window, "focus", G_CALLBACK(&HandleFocus), NULL);
|
||||
|
||||
GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
|
||||
|
||||
g_signal_connect(G_OBJECT(window), "destroy",
|
||||
G_CALLBACK(gtk_widget_destroyed), &window);
|
||||
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
|
||||
|
||||
// Create the handler.
|
||||
g_handler = new ClientHandler();
|
||||
g_handler->SetMainHwnd(vbox);
|
||||
g_handler->SetWindow(window);
|
||||
|
||||
new OnigRegexpExtension();
|
||||
|
||||
// Create the browser view.
|
||||
CefWindowInfo window_info;
|
||||
CefBrowserSettings browserSettings;
|
||||
|
||||
window_info.SetAsChild(vbox);
|
||||
|
||||
std::string path = io_utils_real_app_path("/index.html");
|
||||
if (path.empty())
|
||||
return -1;
|
||||
|
||||
std::string resolved("file://");
|
||||
resolved.append(path);
|
||||
|
||||
CefBrowser::CreateBrowserSync(window_info,
|
||||
static_cast<CefRefPtr<CefClient> >(g_handler), resolved, browserSettings);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
||||
gtk_widget_show_all(GTK_WIDGET(window));
|
||||
|
||||
GdkPixbuf *pixbuf;
|
||||
GError *error = NULL;
|
||||
std::string iconPath;
|
||||
iconPath.append(szPath);
|
||||
iconPath.append("/atom.png");
|
||||
pixbuf = gdk_pixbuf_new_from_file(iconPath.c_str(), &error);
|
||||
if (pixbuf)
|
||||
gtk_window_set_icon(GTK_WINDOW(window), pixbuf);
|
||||
|
||||
// Install an signal handler so we clean up after ourselves.
|
||||
signal(SIGINT, TerminationSignalHandler);
|
||||
signal(SIGTERM, TerminationSignalHandler);
|
||||
|
||||
CefRunMessageLoop();
|
||||
|
||||
CefShutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Global functions
|
||||
|
||||
std::string AppGetWorkingDirectory() {
|
||||
return szWorkingDir;
|
||||
}
|
||||
|
||||
std::string AppPath() {
|
||||
return szPath;
|
||||
}
|
||||
|
||||
std::string PathToOpen() {
|
||||
return szPathToOpen;
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
#ifndef ATOM_H_
|
||||
#define ATOM_H_
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "include/cef_base.h"
|
||||
|
||||
class CefApp;
|
||||
class CefBrowser;
|
||||
class CefCommandLine;
|
||||
|
||||
// Returns the main browser window instance.
|
||||
CefRefPtr<CefBrowser> AppGetBrowser();
|
||||
|
||||
// Returns the main application window handle.
|
||||
CefWindowHandle AppGetMainHwnd();
|
||||
|
||||
// Returns the application working directory.
|
||||
std::string AppGetWorkingDirectory();
|
||||
|
||||
// Returns the application's path.
|
||||
std::string AppPath();
|
||||
|
||||
// Returns the initial path to open.
|
||||
std::string PathToOpen();
|
||||
|
||||
// Returns the application settings
|
||||
void AppGetSettings(CefSettings& settings, CefRefPtr<CefApp>& app);
|
||||
|
||||
#endif
|
||||
|
Antes Largura: | Altura: | Tamanho: 25 KiB |
@@ -1,263 +0,0 @@
|
||||
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
#include "client_handler.h"
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include "include/cef_browser.h"
|
||||
#include "include/cef_frame.h"
|
||||
#include "atom.h"
|
||||
#include "native_handler.h"
|
||||
#include "atom.h"
|
||||
#include <stdlib.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
ClientHandler::ClientHandler() :
|
||||
m_MainHwnd(NULL), m_BrowserHwnd(NULL) {
|
||||
m_nativeHandler = new NativeHandler();
|
||||
}
|
||||
|
||||
ClientHandler::~ClientHandler() {
|
||||
}
|
||||
|
||||
void ClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
AutoLock lock_scope(this);
|
||||
if (!m_Browser.get()) {
|
||||
// We need to keep the main child window, but not popup windows
|
||||
m_Browser = browser;
|
||||
m_BrowserHwnd = browser->GetWindowHandle();
|
||||
}
|
||||
}
|
||||
|
||||
bool ClientHandler::DoClose(CefRefPtr<CefBrowser> browser) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
if (m_BrowserHwnd == browser->GetWindowHandle()) {
|
||||
// Since the main window contains the browser window, we need to close
|
||||
// the parent window instead of the browser window.
|
||||
CloseMainWindow();
|
||||
|
||||
// Return true here so that we can skip closing the browser window
|
||||
// in this pass. (It will be destroyed due to the call to close
|
||||
// the parent above.)
|
||||
return true;
|
||||
}
|
||||
|
||||
// A popup browser window is not contained in another window, so we can let
|
||||
// these windows close by themselves.
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
if (m_BrowserHwnd == browser->GetWindowHandle()) {
|
||||
// Free the browser pointer so that the browser can be destroyed
|
||||
m_Browser = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void ClientHandler::OnLoadStart(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
if (m_BrowserHwnd == browser->GetWindowHandle() && frame->IsMain()) {
|
||||
CefRefPtr<CefV8Context> context = frame->GetV8Context();
|
||||
CefRefPtr<CefV8Value> global = context->GetGlobal();
|
||||
context->Enter();
|
||||
|
||||
CefRefPtr<CefV8Value> windowNumber = CefV8Value::CreateInt(0);
|
||||
global->SetValue("$windowNumber", windowNumber, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
std::string path;
|
||||
if (m_nativeHandler && !m_nativeHandler->path.empty())
|
||||
path = m_nativeHandler->path;
|
||||
else
|
||||
path.append(PathToOpen());
|
||||
|
||||
CefRefPtr<CefV8Value> pathToOpen = CefV8Value::CreateString(path);
|
||||
global->SetValue("$pathToOpen", pathToOpen, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
m_nativeHandler->window = window;
|
||||
m_nativeHandler->path = path;
|
||||
|
||||
CefRefPtr<CefV8Value> atom = CefV8Value::CreateObject(NULL, NULL);
|
||||
global->SetValue("atom", atom, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
CefRefPtr<CefV8Value> loadPath = CefV8Value::CreateString(AppPath());
|
||||
atom->SetValue("loadPath", loadPath, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
CefRefPtr<CefV8Value> bootstrapScript = CefV8Value::CreateString(
|
||||
"single-window-bootstrap");
|
||||
global->SetValue("$bootstrapScript", bootstrapScript,
|
||||
V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
context->Exit();
|
||||
}
|
||||
}
|
||||
|
||||
void ClientHandler::OnLoadEnd(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, int httpStatusCode) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
}
|
||||
|
||||
bool ClientHandler::OnLoadError(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, ErrorCode errorCode, const CefString& failedUrl,
|
||||
CefString& errorText) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
if (errorCode == ERR_CACHE_MISS) {
|
||||
// Usually caused by navigating to a page with POST data via back or
|
||||
// forward buttons.
|
||||
errorText = "<html><head><title>Expired Form Data</title></head>"
|
||||
"<body><h1>Expired Form Data</h1>"
|
||||
"<h2>Your form request has expired. "
|
||||
"Click reload to re-submit the form data.</h2></body>"
|
||||
"</html>";
|
||||
} else {
|
||||
// All other messages.
|
||||
std::stringstream ss;
|
||||
ss << "<html><head><title>Load Failed</title></head>"
|
||||
"<body><h1>Load Failed</h1>"
|
||||
"<h2>Load of URL " << std::string(failedUrl)
|
||||
<< " failed with error code " << static_cast<int>(errorCode)
|
||||
<< ".</h2></body>"
|
||||
"</html>";
|
||||
errorText = ss.str();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::OnNavStateChange(CefRefPtr<CefBrowser> browser,
|
||||
bool canGoBack, bool canGoForward) {
|
||||
//Intentionally left blank
|
||||
}
|
||||
|
||||
bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
|
||||
const CefString& message, const CefString& source, int line) {
|
||||
REQUIRE_UI_THREAD();
|
||||
std::cout << std::string(message) << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, CefRefPtr<CefDOMNode> node) {
|
||||
REQUIRE_UI_THREAD();
|
||||
}
|
||||
|
||||
bool ClientHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser, KeyEventType type,
|
||||
int code, int modifiers, bool isSystemKey, bool isAfterJavaScript) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ClientHandler::GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, const CefPrintInfo& printInfo,
|
||||
const CefString& url, const CefString& title, int currentPage, int maxPages,
|
||||
CefString& topLeft, CefString& topCenter, CefString& topRight,
|
||||
CefString& bottomLeft, CefString& bottomCenter, CefString& bottomRight) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
// Place the page title at top left
|
||||
topLeft = title;
|
||||
// Place the page URL at top right
|
||||
topRight = url;
|
||||
|
||||
// Place "Page X of Y" at bottom center
|
||||
std::stringstream strstream;
|
||||
strstream << "Page " << currentPage << " of " << maxPages;
|
||||
bottomCenter = strstream.str();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::OnContextCreated(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context) {
|
||||
REQUIRE_UI_THREAD();
|
||||
}
|
||||
|
||||
bool ClientHandler::OnDragStart(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefDragData> dragData, DragOperationsMask mask) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ClientHandler::OnDragEnter(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefDragData> dragData, DragOperationsMask mask) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::SetWindow(GtkWidget* widget) {
|
||||
window = widget;
|
||||
}
|
||||
|
||||
void ClientHandler::SetMainHwnd(CefWindowHandle hwnd) {
|
||||
AutoLock lock_scope(this);
|
||||
m_MainHwnd = hwnd;
|
||||
}
|
||||
|
||||
// ClientHandler::ClientLifeSpanHandler implementation
|
||||
bool ClientHandler::OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
|
||||
const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo,
|
||||
const CefString& url, CefRefPtr<CefClient>& client,
|
||||
CefBrowserSettings& settings) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientHandler::OnAddressChange(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, const CefString& url) {
|
||||
//Intentionally left blank
|
||||
}
|
||||
|
||||
void ClientHandler::OnTitleChange(CefRefPtr<CefBrowser> browser,
|
||||
const CefString& title) {
|
||||
REQUIRE_UI_THREAD();
|
||||
|
||||
std::string titleStr(title);
|
||||
|
||||
size_t inHomeDir;
|
||||
std::string home = getenv("HOME");
|
||||
inHomeDir = titleStr.find(home);
|
||||
if (inHomeDir == 0) {
|
||||
titleStr = titleStr.substr(home.length());
|
||||
titleStr.insert(0, "~");
|
||||
}
|
||||
|
||||
size_t lastSlash;
|
||||
lastSlash = titleStr.rfind("/");
|
||||
|
||||
std::string formatted;
|
||||
if (lastSlash != std::string::npos && lastSlash + 1 < titleStr.length()) {
|
||||
formatted.append(titleStr, lastSlash + 1, titleStr.length() - lastSlash);
|
||||
formatted.append(" (");
|
||||
formatted.append(titleStr, 0, lastSlash);
|
||||
formatted.append(")");
|
||||
} else
|
||||
formatted.append(titleStr);
|
||||
formatted.append(" - atom");
|
||||
|
||||
GtkWidget* window = gtk_widget_get_ancestor(
|
||||
GTK_WIDGET(browser->GetWindowHandle()), GTK_TYPE_WINDOW);
|
||||
gtk_window_set_title(GTK_WINDOW(window), formatted.c_str());
|
||||
}
|
||||
|
||||
void ClientHandler::SendNotification(NotificationType type) {
|
||||
// TODO(port): Implement this method.
|
||||
}
|
||||
|
||||
void ClientHandler::CloseMainWindow() {
|
||||
// TODO(port): Close main window.
|
||||
}
|
||||
@@ -1,155 +0,0 @@
|
||||
#ifndef CLIENT_HANDLER_H_
|
||||
#define CLIENT_HANDLER_H_
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "include/cef_client.h"
|
||||
#include "util.h"
|
||||
#include "native_handler.h"
|
||||
|
||||
// ClientHandler implementation.
|
||||
class ClientHandler: public CefClient,
|
||||
public CefLifeSpanHandler,
|
||||
public CefLoadHandler,
|
||||
public CefDisplayHandler,
|
||||
public CefFocusHandler,
|
||||
public CefKeyboardHandler,
|
||||
public CefPrintHandler,
|
||||
public CefV8ContextHandler,
|
||||
public CefDragHandler {
|
||||
public:
|
||||
ClientHandler();
|
||||
virtual ~ClientHandler();
|
||||
|
||||
// CefClient methods
|
||||
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
virtual CefRefPtr<CefDragHandler> GetDragHandler() OVERRIDE {
|
||||
return this;
|
||||
}
|
||||
|
||||
// CefLifeSpanHandler methods
|
||||
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
|
||||
const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo,
|
||||
const CefString& url, CefRefPtr<CefClient>& client,
|
||||
CefBrowserSettings& settings) OVERRIDE;
|
||||
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||
|
||||
// CefLoadHandler methods
|
||||
virtual void OnLoadStart(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame) OVERRIDE;
|
||||
virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, int httpStatusCode) OVERRIDE;
|
||||
virtual bool OnLoadError(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, ErrorCode errorCode,
|
||||
const CefString& failedUrl, CefString& errorText) OVERRIDE;
|
||||
|
||||
// CefDisplayHandler methods
|
||||
virtual void OnNavStateChange(CefRefPtr<CefBrowser> browser, bool canGoBack,
|
||||
bool canGoForward) OVERRIDE;
|
||||
virtual void OnAddressChange(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, const CefString& url) OVERRIDE;
|
||||
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
|
||||
const CefString& title) OVERRIDE;
|
||||
virtual bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
|
||||
const CefString& message, const CefString& source, int line) OVERRIDE;
|
||||
|
||||
// CefFocusHandler methods.
|
||||
virtual void OnFocusedNodeChanged(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, CefRefPtr<CefDOMNode> node) OVERRIDE;
|
||||
|
||||
// CefKeyboardHandler methods.
|
||||
virtual bool OnKeyEvent(CefRefPtr<CefBrowser> browser, KeyEventType type,
|
||||
int code, int modifiers, bool isSystemKey, bool isAfterJavaScript)
|
||||
OVERRIDE;
|
||||
|
||||
// CefPrintHandler methods.
|
||||
virtual bool GetPrintHeaderFooter(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, const CefPrintInfo& printInfo,
|
||||
const CefString& url, const CefString& title, int currentPage,
|
||||
int maxPages, CefString& topLeft, CefString& topCenter,
|
||||
CefString& topRight, CefString& bottomLeft, CefString& bottomCenter,
|
||||
CefString& bottomRight) OVERRIDE;
|
||||
|
||||
// CefV8ContextHandler methods
|
||||
virtual void OnContextCreated(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context) OVERRIDE;
|
||||
|
||||
// CefDragHandler methods.
|
||||
virtual bool OnDragStart(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefDragData> dragData, DragOperationsMask mask) OVERRIDE;
|
||||
virtual bool OnDragEnter(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefDragData> dragData, DragOperationsMask mask) OVERRIDE;
|
||||
|
||||
void SetWindow(GtkWidget* window);
|
||||
void SetMainHwnd(CefWindowHandle hwnd);
|
||||
CefWindowHandle GetMainHwnd() {
|
||||
return m_MainHwnd;
|
||||
}
|
||||
void SetEditHwnd(CefWindowHandle hwnd);
|
||||
|
||||
CefRefPtr<CefBrowser> GetBrowser() {
|
||||
return m_Browser;
|
||||
}
|
||||
CefWindowHandle GetBrowserHwnd() {
|
||||
return m_BrowserHwnd;
|
||||
}
|
||||
|
||||
enum NotificationType {
|
||||
NOTIFY_CONSOLE_MESSAGE
|
||||
};
|
||||
void SendNotification(NotificationType type);
|
||||
void CloseMainWindow();
|
||||
|
||||
protected:
|
||||
|
||||
GtkWidget* window;
|
||||
|
||||
CefRefPtr<NativeHandler> m_nativeHandler;
|
||||
|
||||
// The child browser window
|
||||
CefRefPtr<CefBrowser> m_Browser;
|
||||
|
||||
// The main frame window handle
|
||||
CefWindowHandle m_MainHwnd;
|
||||
|
||||
// The child browser window handle
|
||||
CefWindowHandle m_BrowserHwnd;
|
||||
|
||||
// The edit window handle
|
||||
CefWindowHandle m_EditHwnd;
|
||||
|
||||
// Support for logging.
|
||||
std::string m_LogFile;
|
||||
|
||||
// Include the default reference counting implementation.
|
||||
IMPLEMENT_REFCOUNTING(ClientHandler)
|
||||
;
|
||||
// Include the default locking implementation.
|
||||
IMPLEMENT_LOCKING(ClientHandler)
|
||||
;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,49 +0,0 @@
|
||||
#include "io_utils.h"
|
||||
#include "atom.h"
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define BUFFER_SIZE 8192
|
||||
|
||||
using namespace std;
|
||||
|
||||
int io_utils_read(string path, string* output) {
|
||||
int fd = open(path.c_str(), O_RDONLY);
|
||||
if (fd <= 0)
|
||||
return 0;
|
||||
|
||||
char buffer[BUFFER_SIZE];
|
||||
unsigned int bytesRead = 0;
|
||||
unsigned int totalRead = 0;
|
||||
while ((bytesRead = read(fd, buffer, BUFFER_SIZE)) > 0) {
|
||||
output->append(buffer, 0, bytesRead);
|
||||
totalRead += bytesRead;
|
||||
}
|
||||
close(fd);
|
||||
return totalRead;
|
||||
}
|
||||
|
||||
string io_utils_real_app_path(string relativePath) {
|
||||
string path = AppPath() + relativePath;
|
||||
char* realPath = realpath(path.c_str(), NULL);
|
||||
if (realPath != NULL) {
|
||||
string realAppPath(realPath);
|
||||
free(realPath);
|
||||
return realAppPath;
|
||||
} else
|
||||
return "";
|
||||
}
|
||||
|
||||
string io_util_app_directory() {
|
||||
char path[BUFFER_SIZE];
|
||||
if (readlink("/proc/self/exe", path, BUFFER_SIZE) < 2)
|
||||
return "";
|
||||
|
||||
string appPath(path);
|
||||
unsigned int lastSlash = appPath.rfind("/");
|
||||
if (lastSlash != string::npos)
|
||||
return appPath.substr(0, lastSlash);
|
||||
else
|
||||
return appPath;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
#ifndef IO_UTILS_H_
|
||||
#define IO_UTILS_H_
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* Read file at path and append to output string
|
||||
*/
|
||||
int io_utils_read(std::string path, std::string* output);
|
||||
|
||||
/**
|
||||
* Get realpath for given path that is relative to the app path
|
||||
*/
|
||||
std::string io_utils_real_app_path(std::string relativePath);
|
||||
|
||||
/**
|
||||
* Get path to directory where atom app resides
|
||||
*/
|
||||
std::string io_util_app_directory();
|
||||
|
||||
#endif
|
||||
@@ -1,527 +0,0 @@
|
||||
#include "native_handler.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_runnable.h"
|
||||
#include "client_handler.h"
|
||||
#include "io_utils.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <vector>
|
||||
#include <gtk/gtk.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <pthread.h>
|
||||
#include <openssl/evp.h>
|
||||
|
||||
#define BUFFER_SIZE 8192
|
||||
|
||||
using namespace std;
|
||||
|
||||
void *NotifyWatchersCallback(void* pointer) {
|
||||
NativeHandler* handler = (NativeHandler*) pointer;
|
||||
handler->NotifyWatchers();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ExecuteWatchCallback(NotifyContext notifyContext) {
|
||||
map<string, CallbackContext> callbacks =
|
||||
notifyContext.callbacks[notifyContext.descriptor];
|
||||
map<string, CallbackContext>::iterator callback;
|
||||
for (callback = callbacks.begin(); callback != callbacks.end(); callback++) {
|
||||
CallbackContext callbackContext = callback->second;
|
||||
CefRefPtr<CefV8Context> context = callbackContext.context;
|
||||
CefRefPtr<CefV8Value> function = callbackContext.function;
|
||||
|
||||
context->Enter();
|
||||
|
||||
CefV8ValueList args;
|
||||
CefRefPtr<CefV8Value> retval;
|
||||
CefRefPtr<CefV8Exception> e;
|
||||
args.push_back(callbackContext.eventTypes);
|
||||
function->ExecuteFunction(function, args, retval, e, true);
|
||||
|
||||
context->Exit();
|
||||
}
|
||||
}
|
||||
|
||||
NativeHandler::NativeHandler() :
|
||||
CefV8Handler() {
|
||||
string nativePath = io_utils_real_app_path("/src/stdlib/native-handler.js");
|
||||
if (!nativePath.empty()) {
|
||||
string extensionCode;
|
||||
if (io_utils_read(nativePath, &extensionCode) > 0)
|
||||
CefRegisterExtension("v8/native-handler", extensionCode, this);
|
||||
}
|
||||
|
||||
notifyFd = inotify_init();
|
||||
if (notifyFd != -1)
|
||||
g_thread_create_full(NotifyWatchersCallback, this, 0, true, false,
|
||||
G_THREAD_PRIORITY_NORMAL, NULL);
|
||||
}
|
||||
|
||||
void NativeHandler::NotifyWatchers() {
|
||||
char buffer[BUFFER_SIZE];
|
||||
ssize_t bufferRead;
|
||||
size_t eventSize;
|
||||
ssize_t bufferIndex;
|
||||
struct inotify_event *event;
|
||||
bufferRead = read(notifyFd, buffer, BUFFER_SIZE);
|
||||
while (bufferRead > 0) {
|
||||
bufferIndex = 0;
|
||||
while (bufferIndex < bufferRead) {
|
||||
event = (struct inotify_event *) &buffer[bufferIndex];
|
||||
eventSize = offsetof (struct inotify_event, name) + event->len;
|
||||
|
||||
NotifyContext context;
|
||||
context.descriptor = event->wd;
|
||||
context.callbacks = pathCallbacks;
|
||||
CefPostTask(TID_UI,
|
||||
NewCefRunnableFunction(&ExecuteWatchCallback, context));
|
||||
|
||||
bufferIndex += eventSize;
|
||||
}
|
||||
bufferRead = read(notifyFd, buffer, BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
void NativeHandler::Exists(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
struct stat statInfo;
|
||||
int result = stat(path.c_str(), &statInfo);
|
||||
retval = CefV8Value::CreateBool(result == 0);
|
||||
}
|
||||
|
||||
void NativeHandler::Read(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
string value;
|
||||
io_utils_read(path, &value);
|
||||
retval = CefV8Value::CreateString(value);
|
||||
}
|
||||
|
||||
void NativeHandler::Absolute(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
string relativePath;
|
||||
if (path[0] != '~')
|
||||
relativePath.append(path);
|
||||
else {
|
||||
relativePath.append(getenv("HOME"));
|
||||
relativePath.append(path, 1, path.length() - 1);
|
||||
}
|
||||
|
||||
vector < string > segments;
|
||||
char allSegments[relativePath.length() + 1];
|
||||
strcpy(allSegments, relativePath.c_str());
|
||||
const char* segment;
|
||||
for (segment = strtok(allSegments, "/"); segment;
|
||||
segment = strtok(NULL, "/")) {
|
||||
if (strcmp(segment, ".") == 0)
|
||||
continue;
|
||||
if (strcmp(segment, "..") == 0) {
|
||||
if (segments.empty()) {
|
||||
retval = CefV8Value::CreateString("/");
|
||||
return;
|
||||
}
|
||||
segments.pop_back();
|
||||
} else
|
||||
segments.push_back(segment);
|
||||
}
|
||||
|
||||
string absolutePath;
|
||||
unsigned int i;
|
||||
for (i = 0; i < segments.size(); i++) {
|
||||
absolutePath.append("/");
|
||||
absolutePath.append(segments.at(i));
|
||||
}
|
||||
retval = CefV8Value::CreateString(absolutePath);
|
||||
}
|
||||
|
||||
void ListDirectory(string path, vector<string>* paths, bool recursive) {
|
||||
dirent **children;
|
||||
int childrenCount = scandir(path.c_str(), &children, 0, alphasort);
|
||||
struct stat statInfo;
|
||||
int result;
|
||||
|
||||
for (int i = 0; i < childrenCount; i++) {
|
||||
if (strcmp(children[i]->d_name, ".") == 0
|
||||
|| strcmp(children[i]->d_name, "..") == 0) {
|
||||
free(children[i]);
|
||||
continue;
|
||||
}
|
||||
string entryPath(path + "/" + children[i]->d_name);
|
||||
paths->push_back(entryPath);
|
||||
if (recursive) {
|
||||
result = stat(entryPath.c_str(), &statInfo);
|
||||
if (result == 0 && S_ISDIR(statInfo.st_mode))
|
||||
ListDirectory(entryPath, paths, recursive);
|
||||
}
|
||||
free(children[i]);
|
||||
}
|
||||
free(children);
|
||||
}
|
||||
|
||||
void DeleteContents(string path) {
|
||||
dirent **children;
|
||||
const char* dirPath = path.c_str();
|
||||
int childrenCount = scandir(dirPath, &children, 0, alphasort);
|
||||
struct stat statInfo;
|
||||
|
||||
for (int i = 0; i < childrenCount; i++) {
|
||||
if (strcmp(children[i]->d_name, ".") == 0
|
||||
|| strcmp(children[i]->d_name, "..") == 0) {
|
||||
free(children[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
string entryPath(path + "/" + children[i]->d_name);
|
||||
if (stat(entryPath.c_str(), &statInfo) != 0) {
|
||||
free(children[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (S_ISDIR(statInfo.st_mode))
|
||||
DeleteContents(entryPath);
|
||||
else if (S_ISREG(statInfo.st_mode))
|
||||
remove(entryPath.c_str());
|
||||
}
|
||||
free(children);
|
||||
rmdir(dirPath);
|
||||
}
|
||||
|
||||
void NativeHandler::List(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
bool recursive = arguments[1]->GetBoolValue();
|
||||
vector < string > *paths = new vector<string>;
|
||||
ListDirectory(path, paths, recursive);
|
||||
|
||||
retval = CefV8Value::CreateArray();
|
||||
for (uint i = 0; i < paths->size(); i++)
|
||||
retval->SetValue(i, CefV8Value::CreateString(paths->at(i)));
|
||||
free (paths);
|
||||
}
|
||||
|
||||
void NativeHandler::IsFile(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
struct stat statInfo;
|
||||
int result = stat(path.c_str(), &statInfo);
|
||||
retval = CefV8Value::CreateBool(result == 0 && S_ISREG(statInfo.st_mode));
|
||||
}
|
||||
|
||||
void NativeHandler::IsDirectory(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
struct stat statInfo;
|
||||
int result = stat(path.c_str(), &statInfo);
|
||||
retval = CefV8Value::CreateBool(result == 0 && S_ISDIR(statInfo.st_mode));
|
||||
}
|
||||
|
||||
void NativeHandler::OpenDialog(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
GtkWidget *dialog;
|
||||
dialog = gtk_file_chooser_dialog_new("Open File", GTK_WINDOW(window),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
|
||||
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
||||
char *filename;
|
||||
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
||||
retval = CefV8Value::CreateString(filename);
|
||||
g_free(filename);
|
||||
} else
|
||||
retval = CefV8Value::CreateNull();
|
||||
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
||||
void NativeHandler::Open(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
path = arguments[0]->GetStringValue().ToString();
|
||||
CefV8Context::GetCurrentContext()->GetBrowser()->Reload();
|
||||
}
|
||||
|
||||
void NativeHandler::Write(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
string content = arguments[1]->GetStringValue().ToString();
|
||||
|
||||
ofstream file;
|
||||
file.open(path.c_str());
|
||||
file << content;
|
||||
file.close();
|
||||
}
|
||||
|
||||
void NativeHandler::WriteToPasteboard(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string content = arguments[0]->GetStringValue().ToString();
|
||||
GtkClipboard* clipboard = gtk_clipboard_get_for_display(
|
||||
gdk_display_get_default(), GDK_NONE);
|
||||
gtk_clipboard_set_text(clipboard, content.c_str(), content.length());
|
||||
gtk_clipboard_store(clipboard);
|
||||
}
|
||||
|
||||
void NativeHandler::ReadFromPasteboard(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
GtkClipboard* clipboard = gtk_clipboard_get_for_display(
|
||||
gdk_display_get_default(), GDK_NONE);
|
||||
char* content = gtk_clipboard_wait_for_text(clipboard);
|
||||
retval = CefV8Value::CreateString(content);
|
||||
}
|
||||
|
||||
void NativeHandler::AsyncList(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
bool recursive = arguments[1]->GetBoolValue();
|
||||
vector < string > *paths = new vector<string>;
|
||||
ListDirectory(path, paths, recursive);
|
||||
|
||||
CefRefPtr<CefV8Value> callbackPaths = CefV8Value::CreateArray();
|
||||
for (uint i = 0; i < paths->size(); i++)
|
||||
callbackPaths->SetValue(i, CefV8Value::CreateString(paths->at(i)));
|
||||
CefV8ValueList args;
|
||||
args.push_back(callbackPaths);
|
||||
CefRefPtr<CefV8Exception> e;
|
||||
arguments[2]->ExecuteFunction(arguments[2], args, retval, e, true);
|
||||
if (e)
|
||||
exception = e->GetMessage();
|
||||
free (paths);
|
||||
}
|
||||
|
||||
void NativeHandler::MakeDirectory(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string content = arguments[0]->GetStringValue().ToString();
|
||||
mkdir(content.c_str(), S_IRWXU);
|
||||
}
|
||||
|
||||
void NativeHandler::Move(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string from = arguments[0]->GetStringValue().ToString();
|
||||
string to = arguments[1]->GetStringValue().ToString();
|
||||
rename(from.c_str(), to.c_str());
|
||||
}
|
||||
|
||||
void NativeHandler::Remove(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string pathArgument = arguments[0]->GetStringValue().ToString();
|
||||
const char* path = pathArgument.c_str();
|
||||
|
||||
struct stat statInfo;
|
||||
if (stat(path, &statInfo) != 0)
|
||||
return;
|
||||
|
||||
if (S_ISREG(statInfo.st_mode))
|
||||
remove(path);
|
||||
else if (S_ISDIR(statInfo.st_mode))
|
||||
DeleteContents(pathArgument);
|
||||
}
|
||||
|
||||
void NativeHandler::Alert(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
CefRefPtr<CefV8Value> buttonNamesAndCallbacks;
|
||||
if (arguments.size() < 3)
|
||||
buttonNamesAndCallbacks = CefV8Value::CreateArray();
|
||||
else
|
||||
buttonNamesAndCallbacks = arguments[2];
|
||||
|
||||
GtkWidget *dialog;
|
||||
dialog = gtk_dialog_new_with_buttons("atom", GTK_WINDOW(window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT, NULL);
|
||||
for (int i = 0; i < buttonNamesAndCallbacks->GetArrayLength(); i++) {
|
||||
string title =
|
||||
buttonNamesAndCallbacks->GetValue(i)->GetValue(0)->GetStringValue().ToString();
|
||||
gtk_dialog_add_button(GTK_DIALOG(dialog), title.c_str(), i);
|
||||
}
|
||||
gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
|
||||
|
||||
string dialogMessage(arguments[0]->GetStringValue().ToString());
|
||||
dialogMessage.append("\n\n");
|
||||
dialogMessage.append(arguments[1]->GetStringValue().ToString());
|
||||
GtkWidget *label;
|
||||
label = gtk_label_new(dialogMessage.c_str());
|
||||
|
||||
GtkWidget *contentArea;
|
||||
contentArea = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
||||
gtk_container_add(GTK_CONTAINER(contentArea), label);
|
||||
|
||||
gtk_widget_show_all(dialog);
|
||||
int result = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
if (result >= 0) {
|
||||
CefRefPtr<CefV8Value> callback =
|
||||
buttonNamesAndCallbacks->GetValue(result)->GetValue(1);
|
||||
CefV8ValueList args;
|
||||
CefRefPtr<CefV8Exception> e;
|
||||
callback->ExecuteFunction(callback, args, retval, e, true);
|
||||
if (e)
|
||||
exception = e->GetMessage();
|
||||
}
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
||||
void NativeHandler::WatchPath(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
int descriptor = inotify_add_watch(notifyFd, path.c_str(),
|
||||
IN_ALL_EVENTS & ~(IN_CLOSE | IN_OPEN | IN_ACCESS));
|
||||
if (descriptor == -1)
|
||||
return;
|
||||
|
||||
CallbackContext callbackContext;
|
||||
callbackContext.context = CefV8Context::GetCurrentContext();
|
||||
callbackContext.function = arguments[1];
|
||||
CefRefPtr<CefV8Value> eventTypes = CefV8Value::CreateObject(NULL, NULL);
|
||||
eventTypes->SetValue("modified", CefV8Value::CreateBool(true),
|
||||
V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
callbackContext.eventTypes = eventTypes;
|
||||
|
||||
stringstream idStream;
|
||||
idStream << "counter";
|
||||
idStream << idCounter;
|
||||
string id = idStream.str();
|
||||
idCounter++;
|
||||
pathDescriptors[path] = descriptor;
|
||||
pathCallbacks[descriptor][id] = callbackContext;
|
||||
retval = CefV8Value::CreateString(id);
|
||||
}
|
||||
|
||||
void NativeHandler::UnwatchPath(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
|
||||
int descriptor = pathDescriptors[path];
|
||||
if (descriptor == -1)
|
||||
return;
|
||||
|
||||
map<string, CallbackContext> callbacks = pathCallbacks[descriptor];
|
||||
string id = arguments[1]->GetStringValue().ToString();
|
||||
callbacks.erase(id);
|
||||
if (callbacks.empty())
|
||||
inotify_rm_watch(notifyFd, descriptor);
|
||||
}
|
||||
|
||||
void NativeHandler::Digest(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
|
||||
int fd = open(path.c_str(), O_RDONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
|
||||
const EVP_MD *md;
|
||||
OpenSSL_add_all_digests();
|
||||
md = EVP_get_digestbyname("md5");
|
||||
if (!md)
|
||||
return;
|
||||
|
||||
EVP_MD_CTX context;
|
||||
EVP_MD_CTX_init(&context);
|
||||
EVP_DigestInit_ex(&context, md, NULL);
|
||||
|
||||
char buffer[BUFFER_SIZE];
|
||||
int r;
|
||||
while ((r = read(fd, buffer, sizeof buffer)) > 0)
|
||||
EVP_DigestUpdate(&context, buffer, r);
|
||||
close(fd);
|
||||
|
||||
unsigned char value[EVP_MAX_MD_SIZE];
|
||||
unsigned int length;
|
||||
EVP_DigestFinal_ex(&context, value, &length);
|
||||
EVP_MD_CTX_cleanup(&context);
|
||||
|
||||
stringstream md5;
|
||||
char hex[3];
|
||||
for (uint i = 0; i < length; i++) {
|
||||
sprintf(hex, "%02x", value[i]);
|
||||
md5 << hex;
|
||||
}
|
||||
retval = CefV8Value::CreateString(md5.str());
|
||||
}
|
||||
|
||||
void NativeHandler::LastModified(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
string path = arguments[0]->GetStringValue().ToString();
|
||||
struct stat statInfo;
|
||||
if (stat(path.c_str(), &statInfo) == 0) {
|
||||
CefTime time(statInfo.st_mtime);
|
||||
retval = CefV8Value::CreateDate(time);
|
||||
}
|
||||
}
|
||||
|
||||
bool NativeHandler::Execute(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception) {
|
||||
if (name == "exists")
|
||||
Exists(name, object, arguments, retval, exception);
|
||||
else if (name == "read")
|
||||
Read(name, object, arguments, retval, exception);
|
||||
else if (name == "absolute")
|
||||
Absolute(name, object, arguments, retval, exception);
|
||||
else if (name == "list")
|
||||
List(name, object, arguments, retval, exception);
|
||||
else if (name == "isFile")
|
||||
IsFile(name, object, arguments, retval, exception);
|
||||
else if (name == "isDirectory")
|
||||
IsDirectory(name, object, arguments, retval, exception);
|
||||
else if (name == "showDevTools")
|
||||
CefV8Context::GetCurrentContext()->GetBrowser()->ShowDevTools();
|
||||
else if (name == "openDialog")
|
||||
OpenDialog(name, object, arguments, retval, exception);
|
||||
else if (name == "open")
|
||||
Open(name, object, arguments, retval, exception);
|
||||
else if (name == "write")
|
||||
Write(name, object, arguments, retval, exception);
|
||||
else if (name == "writeToPasteboard")
|
||||
WriteToPasteboard(name, object, arguments, retval, exception);
|
||||
else if (name == "readFromPasteboard")
|
||||
ReadFromPasteboard(name, object, arguments, retval, exception);
|
||||
else if (name == "asyncList")
|
||||
AsyncList(name, object, arguments, retval, exception);
|
||||
else if (name == "makeDirectory")
|
||||
MakeDirectory(name, object, arguments, retval, exception);
|
||||
else if (name == "move")
|
||||
Move(name, object, arguments, retval, exception);
|
||||
else if (name == "remove")
|
||||
Remove(name, object, arguments, retval, exception);
|
||||
else if (name == "alert")
|
||||
Alert(name, object, arguments, retval, exception);
|
||||
else if (name == "watchPath")
|
||||
WatchPath(name, object, arguments, retval, exception);
|
||||
else if (name == "unwatchPath")
|
||||
UnwatchPath(name, object, arguments, retval, exception);
|
||||
else if (name == "md5ForPath")
|
||||
Digest(name, object, arguments, retval, exception);
|
||||
else if (name == "getPlatform")
|
||||
retval = CefV8Value::CreateString("linux");
|
||||
else if (name == "lastModified")
|
||||
LastModified(name, object, arguments, retval, exception);
|
||||
else
|
||||
cout << "Unhandled -> " + name.ToString() << " : "
|
||||
<< arguments[0]->GetStringValue().ToString() << endl;
|
||||
return true;
|
||||
}
|
||||
@@ -1,128 +0,0 @@
|
||||
#ifndef NATIVE_HANDLER_H_
|
||||
#define NATIVE_HANDLER_H_
|
||||
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_v8.h"
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
struct CallbackContext {
|
||||
CefRefPtr<CefV8Context> context;
|
||||
CefRefPtr<CefV8Value> function;
|
||||
CefRefPtr<CefV8Value> eventTypes;
|
||||
};
|
||||
|
||||
struct NotifyContext {
|
||||
int descriptor;
|
||||
std::map<int, std::map<std::string, CallbackContext> > callbacks;
|
||||
};
|
||||
|
||||
class NativeHandler: public CefV8Handler {
|
||||
public:
|
||||
NativeHandler();
|
||||
|
||||
GtkWidget* window;
|
||||
|
||||
std::string path;
|
||||
|
||||
virtual bool Execute(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void NotifyWatchers();
|
||||
|
||||
IMPLEMENT_REFCOUNTING(NativeHandler)
|
||||
;
|
||||
|
||||
private:
|
||||
|
||||
int notifyFd;
|
||||
|
||||
unsigned long int idCounter;
|
||||
|
||||
std::map<int, std::map<std::string, CallbackContext> > pathCallbacks;
|
||||
|
||||
std::map<std::string, int> pathDescriptors;
|
||||
|
||||
void Exists(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Read(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Absolute(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void List(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void AsyncList(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void IsFile(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void IsDirectory(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void OpenDialog(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Open(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Write(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void WriteToPasteboard(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void ReadFromPasteboard(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void MakeDirectory(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Move(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Remove(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Alert(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void WatchPath(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void UnwatchPath(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void Digest(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
void LastModified(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,185 +0,0 @@
|
||||
#include "onig_regexp_extension.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_runnable.h"
|
||||
#include <oniguruma.h>
|
||||
#include <iostream>
|
||||
#include <stdlib.h>
|
||||
#include "io_utils.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class OnigRegexpUserData: public CefBase {
|
||||
public:
|
||||
OnigRegexpUserData(CefRefPtr<CefV8Value> source) {
|
||||
OnigErrorInfo error;
|
||||
string input = source->GetStringValue().ToString();
|
||||
int length = input.length();
|
||||
UChar* pattern = (UChar*) input.c_str();
|
||||
int code = onig_new(®ex, pattern, pattern + length,
|
||||
ONIG_OPTION_SINGLELINE, ONIG_ENCODING_UTF8, ONIG_SYNTAX_DEFAULT,
|
||||
&error);
|
||||
if (code != ONIG_NORMAL) {
|
||||
char errorText[ONIG_MAX_ERROR_MESSAGE_LEN];
|
||||
onig_error_code_to_str((OnigUChar*) errorText, code, &error);
|
||||
cout << errorText << " for pattern: " << input << endl;
|
||||
}
|
||||
}
|
||||
|
||||
~OnigRegexpUserData() {
|
||||
onig_free(regex);
|
||||
}
|
||||
|
||||
OnigRegion* SearchRegion(string input, int index) {
|
||||
if (!regex)
|
||||
return NULL;
|
||||
|
||||
OnigRegion* region = onig_region_new();
|
||||
UChar* search = (UChar*) input.c_str();
|
||||
unsigned char* start = search + index;
|
||||
unsigned char* end = search + input.length();
|
||||
int code = onig_search(regex, search, end, start, end, region,
|
||||
ONIG_OPTION_NONE);
|
||||
if (code >= 0)
|
||||
return region;
|
||||
else {
|
||||
onig_region_free(region, 1);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> Search(CefRefPtr<CefV8Value> argument,
|
||||
CefRefPtr<CefV8Value> index) {
|
||||
string input = argument->GetStringValue().ToString();
|
||||
OnigRegion* region = SearchRegion(input, index->GetIntValue());
|
||||
if (!region)
|
||||
return CefV8Value::CreateNull();
|
||||
|
||||
CefRefPtr<CefV8Value> indices;
|
||||
CefRefPtr<CefV8Value> resultArray = CefV8Value::CreateArray();
|
||||
CefRefPtr<CefV8Value> indicesArray = CefV8Value::CreateArray();
|
||||
for (int i = 0; i < region->num_regs; i++) {
|
||||
int begin = region->beg[i];
|
||||
int end = region->end[i];
|
||||
resultArray->SetValue(i,
|
||||
CefV8Value::CreateString(input.substr(begin, end - begin)));
|
||||
indicesArray->SetValue(i, CefV8Value::CreateInt(begin));
|
||||
}
|
||||
resultArray->SetValue("index", CefV8Value::CreateInt(region->beg[0]),
|
||||
V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
resultArray->SetValue("indices", indicesArray, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
onig_region_free(region, 1);
|
||||
return resultArray;
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> Test(CefRefPtr<CefV8Value> argument,
|
||||
CefRefPtr<CefV8Value> index) {
|
||||
OnigRegion* region = SearchRegion(argument->GetStringValue().ToString(),
|
||||
index->GetIntValue());
|
||||
CefRefPtr<CefV8Value> text = CefV8Value::CreateBool(region != NULL);
|
||||
if (region)
|
||||
onig_region_free(region, 1);
|
||||
return text;
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> GetCaptureIndices(CefRefPtr<CefV8Value> argument,
|
||||
CefRefPtr<CefV8Value> index) {
|
||||
OnigRegion* region = SearchRegion(argument->GetStringValue().ToString(),
|
||||
index->GetIntValue());
|
||||
CefRefPtr<CefV8Value> indices;
|
||||
if (region) {
|
||||
indices = BuildCaptureIndices(region);
|
||||
onig_region_free(region, 1);
|
||||
} else
|
||||
indices = CefV8Value::CreateNull();
|
||||
return indices;
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> BuildCaptureIndices(OnigRegion *region) {
|
||||
CefRefPtr<CefV8Value> array = CefV8Value::CreateArray();
|
||||
int i = 0;
|
||||
for (int index = 0; index < region->num_regs; index++) {
|
||||
int begin = region->beg[index];
|
||||
int end = region->end[index];
|
||||
if (end - begin <= 0)
|
||||
continue;
|
||||
array->SetValue(i++, CefV8Value::CreateInt(index));
|
||||
array->SetValue(i++, CefV8Value::CreateInt(begin));
|
||||
array->SetValue(i++, CefV8Value::CreateInt(end));
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> CaptureCount() {
|
||||
if (regex)
|
||||
return CefV8Value::CreateInt(onig_number_of_captures(regex));
|
||||
else
|
||||
return CefV8Value::CreateInt(0);
|
||||
}
|
||||
|
||||
regex_t* regex;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(OnigRegexpUserData)
|
||||
;
|
||||
}
|
||||
;
|
||||
|
||||
OnigRegexpExtension::OnigRegexpExtension() :
|
||||
CefV8Handler() {
|
||||
string realFilePath = io_utils_real_app_path(
|
||||
"/src/stdlib/onig-reg-exp-extension.js");
|
||||
if (!realFilePath.empty()) {
|
||||
string extensionCode;
|
||||
if (io_utils_read(realFilePath, &extensionCode) > 0)
|
||||
CefRegisterExtension("v8/oniguruma", extensionCode, this);
|
||||
}
|
||||
}
|
||||
|
||||
bool OnigRegexpExtension::Execute(const CefString& name,
|
||||
CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments,
|
||||
CefRefPtr<CefV8Value>& retval, CefString& exception) {
|
||||
if (name == "getCaptureIndices") {
|
||||
CefRefPtr<CefV8Value> string = arguments[0];
|
||||
CefRefPtr<CefV8Value> index =
|
||||
arguments.size() > 1 ? arguments[1] : CefV8Value::CreateInt(0);
|
||||
OnigRegexpUserData *userData =
|
||||
(OnigRegexpUserData *) object->GetUserData().get();
|
||||
retval = userData->GetCaptureIndices(string, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "search") {
|
||||
CefRefPtr<CefV8Value> string = arguments[0];
|
||||
CefRefPtr<CefV8Value> index =
|
||||
arguments.size() > 1 ? arguments[1] : CefV8Value::CreateInt(0);
|
||||
OnigRegexpUserData *userData =
|
||||
(OnigRegexpUserData *) object->GetUserData().get();
|
||||
retval = userData->Search(string, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "test") {
|
||||
CefRefPtr<CefV8Value> string = arguments[0];
|
||||
CefRefPtr<CefV8Value> index =
|
||||
arguments.size() > 1 ? arguments[1] : CefV8Value::CreateInt(0);
|
||||
OnigRegexpUserData *userData =
|
||||
(OnigRegexpUserData *) object->GetUserData().get();
|
||||
retval = userData->Test(string, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "buildOnigRegExp") {
|
||||
CefRefPtr<CefBase> userData = new OnigRegexpUserData(arguments[0]);
|
||||
retval = CefV8Value::CreateObject(userData, NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "getCaptureCount") {
|
||||
OnigRegexpUserData *userData =
|
||||
(OnigRegexpUserData *) object->GetUserData().get();
|
||||
retval = userData->CaptureCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#ifndef ONIG_REGEXP_EXTENSION_H_
|
||||
#define ONIG_REGEXP_EXTENSION_H_
|
||||
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_v8.h"
|
||||
|
||||
class OnigRegexpExtension: public CefV8Handler {
|
||||
|
||||
public:
|
||||
OnigRegexpExtension();
|
||||
|
||||
virtual bool Execute(const CefString& name, CefRefPtr<CefV8Value> object,
|
||||
const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval,
|
||||
CefString& exception);
|
||||
|
||||
IMPLEMENT_REFCOUNTING(OnigRegexpExtension)
|
||||
;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,22 +0,0 @@
|
||||
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
#ifndef UTIL_H_
|
||||
#define UTIL_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_task.h"
|
||||
|
||||
#include <assert.h> // NOLINT(build/include_order)
|
||||
#ifndef NDEBUG
|
||||
#define ASSERT(condition) if (!(condition)) { assert(false); }
|
||||
#else
|
||||
#define ASSERT(condition) ((void)0)
|
||||
#endif
|
||||
|
||||
#define REQUIRE_UI_THREAD() ASSERT(CefCurrentlyOn(TID_UI));
|
||||
#define REQUIRE_IO_THREAD() ASSERT(CefCurrentlyOn(TID_IO));
|
||||
#define REQUIRE_FILE_THREAD() ASSERT(CefCurrentlyOn(TID_FILE));
|
||||
|
||||
#endif
|
||||
@@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0430"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<CommandLineArguments>
|
||||
<CommandLineArgument
|
||||
argument = "--test"
|
||||
isEnabled = "YES">
|
||||
</CommandLineArgument>
|
||||
</CommandLineArguments>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -1,86 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0430"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -1,86 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0430"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "0487C91114FED5360045E5E3"
|
||||
BuildableName = "Atom.app"
|
||||
BlueprintName = "Atom"
|
||||
ReferencedContainer = "container:Atom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -1,285 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1070</int>
|
||||
<string key="IBDocument.SystemVersion">11E53</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
||||
<string key="IBDocument.AppKitVersion">1138.47</string>
|
||||
<string key="IBDocument.HIToolboxVersion">569.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="NS.object.0">2182</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSCustomView</string>
|
||||
<string>NSWindowTemplate</string>
|
||||
<string>NSView</string>
|
||||
<string>NSCustomObject</string>
|
||||
<string>NSSplitView</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSCustomObject" id="1001">
|
||||
<string key="NSClassName">AtomController</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1003">
|
||||
<string key="NSClassName">FirstResponder</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1004">
|
||||
<string key="NSClassName">NSApplication</string>
|
||||
</object>
|
||||
<object class="NSWindowTemplate" id="1005">
|
||||
<int key="NSWindowStyleMask">15</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
<string key="NSWindowRect">{{1706, 426}, {699, 805}}</string>
|
||||
<int key="NSWTFlags">540017664</int>
|
||||
<string key="NSWindowTitle"/>
|
||||
<string key="NSWindowClass">NSWindow</string>
|
||||
<nil key="NSViewClass"/>
|
||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||
<object class="NSView" key="NSWindowView" id="1006">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSSplitView" id="362253038">
|
||||
<reference key="NSNextResponder" ref="1006"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSCustomView" id="131290216">
|
||||
<reference key="NSNextResponder" ref="362253038"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<string key="NSFrameSize">{699, 805}</string>
|
||||
<reference key="NSSuperview" ref="362253038"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:11</string>
|
||||
<string key="NSClassName">NSView</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{699, 805}</string>
|
||||
<reference key="NSSuperview" ref="1006"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="131290216"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||
<int key="NSDividerStyle">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{699, 805}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="362253038"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<bool key="NSWindowIsRestorable">NO</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">window</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="1005"/>
|
||||
</object>
|
||||
<int key="connectionID">3</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">webView</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="131290216"/>
|
||||
</object>
|
||||
<int key="connectionID">9</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">splitView</string>
|
||||
<reference key="source" ref="1001"/>
|
||||
<reference key="destination" ref="362253038"/>
|
||||
</object>
|
||||
<int key="connectionID">10</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="1002">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="1001"/>
|
||||
<reference key="parent" ref="1002"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="1003"/>
|
||||
<reference key="parent" ref="1002"/>
|
||||
<string key="objectName">First Responder</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-3</int>
|
||||
<reference key="object" ref="1004"/>
|
||||
<reference key="parent" ref="1002"/>
|
||||
<string key="objectName">Application</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">1</int>
|
||||
<reference key="object" ref="1005"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="1006"/>
|
||||
</object>
|
||||
<reference key="parent" ref="1002"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="1006"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="362253038"/>
|
||||
</object>
|
||||
<reference key="parent" ref="1005"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">5</int>
|
||||
<reference key="object" ref="362253038"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="131290216"/>
|
||||
</object>
|
||||
<reference key="parent" ref="1006"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">6</int>
|
||||
<reference key="object" ref="131290216"/>
|
||||
<reference key="parent" ref="362253038"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>-3.IBPluginDependency</string>
|
||||
<string>1.IBNSWindowAutoPositionCentersHorizontal</string>
|
||||
<string>1.IBNSWindowAutoPositionCentersVertical</string>
|
||||
<string>1.IBPluginDependency</string>
|
||||
<string>1.IBWindowTemplateEditedContentRect</string>
|
||||
<string>1.NSWindowTemplate.visibleAtLaunch</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>5.IBPluginDependency</string>
|
||||
<string>6.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO"/>
|
||||
<boolean value="NO"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{357, 418}, {480, 270}}</string>
|
||||
<boolean value="NO"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="1002"/>
|
||||
<reference key="dict.values" ref="1002"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="1002"/>
|
||||
<reference key="dict.values" ref="1002"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">10</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">AtomController</string>
|
||||
<string key="superclassName">NSWindowController</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>devToolsView</string>
|
||||
<string>splitView</string>
|
||||
<string>webView</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSView</string>
|
||||
<string>NSSplitView</string>
|
||||
<string>NSView</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>devToolsView</string>
|
||||
<string>splitView</string>
|
||||
<string>webView</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">devToolsView</string>
|
||||
<string key="candidateClassName">NSView</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">splitView</string>
|
||||
<string key="candidateClassName">NSSplitView</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">webView</string>
|
||||
<string key="candidateClassName">NSView</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/AtomController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
</data>
|
||||
</archive>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Atom</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>atom.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.github.atom-osx</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.0.1</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>GitHub Inc.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>Atom</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://speakeasy.githubapp.com/apps/com.github.atom-osx/appcast.xml</string>
|
||||
<key>SUPublicDSAKeyFile</key>
|
||||
<string>dsa_pub.pem</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,297 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1050</int>
|
||||
<string key="IBDocument.SystemVersion">11C74</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">1938</string>
|
||||
<string key="IBDocument.AppKitVersion">1138.23</string>
|
||||
<string key="IBDocument.HIToolboxVersion">567.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="NS.object.0">1938</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSUserDefaultsController</string>
|
||||
<string>NSMenu</string>
|
||||
<string>NSMenuItem</string>
|
||||
<string>NSCustomObject</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSCustomObject" id="1021">
|
||||
<string key="NSClassName">ClientApplication</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1014">
|
||||
<string key="NSClassName">FirstResponder</string>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="1050">
|
||||
<string key="NSClassName">Atom</string>
|
||||
</object>
|
||||
<object class="NSMenu" id="649796088">
|
||||
<string key="NSTitle">AMainMenu</string>
|
||||
<object class="NSMutableArray" key="NSMenuItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSMenuItem" id="694149608">
|
||||
<reference key="NSMenu" ref="649796088"/>
|
||||
<string key="NSTitle">Atom</string>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSKeyEquivModMask">1048576</int>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<object class="NSCustomResource" key="NSOnImage" id="293900348">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">NSMenuCheckmark</string>
|
||||
</object>
|
||||
<object class="NSCustomResource" key="NSMixedImage" id="169361956">
|
||||
<string key="NSClassName">NSImage</string>
|
||||
<string key="NSResourceName">NSMenuMixedState</string>
|
||||
</object>
|
||||
<string key="NSAction">submenuAction:</string>
|
||||
<object class="NSMenu" key="NSSubmenu" id="110575045">
|
||||
<string key="NSTitle">Atom</string>
|
||||
<object class="NSMutableArray" key="NSMenuItems">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSMenuItem" id="238522557">
|
||||
<reference key="NSMenu" ref="110575045"/>
|
||||
<string key="NSTitle">Run Specs</string>
|
||||
<string key="NSKeyEquiv">s</string>
|
||||
<int key="NSKeyEquivModMask">1835008</int>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="293900348"/>
|
||||
<reference key="NSMixedImage" ref="169361956"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="426052086">
|
||||
<reference key="NSMenu" ref="110575045"/>
|
||||
<string key="NSTitle">Run Benchmarks</string>
|
||||
<string key="NSKeyEquiv">b</string>
|
||||
<int key="NSKeyEquivModMask">1835008</int>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="293900348"/>
|
||||
<reference key="NSMixedImage" ref="169361956"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="305640227">
|
||||
<reference key="NSMenu" ref="110575045"/>
|
||||
<string key="NSTitle">Quit</string>
|
||||
<string key="NSKeyEquiv">q</string>
|
||||
<int key="NSKeyEquivModMask">1048576</int>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="293900348"/>
|
||||
<reference key="NSMixedImage" ref="169361956"/>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSName">_NSAppleMenu</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSName">_NSMainMenu</string>
|
||||
</object>
|
||||
<object class="NSUserDefaultsController" id="143541711">
|
||||
<bool key="NSSharedInstance">YES</bool>
|
||||
</object>
|
||||
<object class="NSCustomObject" id="211903739">
|
||||
<string key="NSClassName">SUUpdater</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">delegate</string>
|
||||
<reference key="source" ref="1050"/>
|
||||
<reference key="destination" ref="1021"/>
|
||||
</object>
|
||||
<int key="connectionID">440</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">stop:</string>
|
||||
<reference key="source" ref="1050"/>
|
||||
<reference key="destination" ref="305640227"/>
|
||||
</object>
|
||||
<int key="connectionID">447</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">runSpecs:</string>
|
||||
<reference key="source" ref="1050"/>
|
||||
<reference key="destination" ref="238522557"/>
|
||||
</object>
|
||||
<int key="connectionID">449</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">runBenchmarks:</string>
|
||||
<reference key="source" ref="1050"/>
|
||||
<reference key="destination" ref="426052086"/>
|
||||
</object>
|
||||
<int key="connectionID">452</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="755588897">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1048"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="1021"/>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="1014"/>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
<string key="objectName">First Responder</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-3</int>
|
||||
<reference key="object" ref="1050"/>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
<string key="objectName">Application</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">29</int>
|
||||
<reference key="object" ref="649796088"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="694149608"/>
|
||||
</object>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
<string key="objectName">MainMenu</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">56</int>
|
||||
<reference key="object" ref="694149608"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="110575045"/>
|
||||
</object>
|
||||
<reference key="parent" ref="649796088"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">57</int>
|
||||
<reference key="object" ref="110575045"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="238522557"/>
|
||||
<reference ref="305640227"/>
|
||||
<reference ref="426052086"/>
|
||||
</object>
|
||||
<reference key="parent" ref="694149608"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">58</int>
|
||||
<reference key="object" ref="238522557"/>
|
||||
<reference key="parent" ref="110575045"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">389</int>
|
||||
<reference key="object" ref="143541711"/>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">441</int>
|
||||
<reference key="object" ref="305640227"/>
|
||||
<reference key="parent" ref="110575045"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">450</int>
|
||||
<reference key="object" ref="426052086"/>
|
||||
<reference key="parent" ref="110575045"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">453</int>
|
||||
<reference key="object" ref="211903739"/>
|
||||
<reference key="parent" ref="755588897"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>-3.IBPluginDependency</string>
|
||||
<string>29.IBPluginDependency</string>
|
||||
<string>389.IBPluginDependency</string>
|
||||
<string>441.IBPluginDependency</string>
|
||||
<string>450.IBPluginDependency</string>
|
||||
<string>453.IBPluginDependency</string>
|
||||
<string>56.IBPluginDependency</string>
|
||||
<string>57.IBPluginDependency</string>
|
||||
<string>58.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="755588897"/>
|
||||
<reference key="dict.values" ref="755588897"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="755588897"/>
|
||||
<reference key="dict.values" ref="755588897"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">453</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
||||
<integer value="1050" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSMenuCheckmark</string>
|
||||
<string>NSMenuMixedState</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>{9, 8}</string>
|
||||
<string>{7, 2}</string>
|
||||
</object>
|
||||
</object>
|
||||
</data>
|
||||
</archive>
|
||||
@@ -1 +0,0 @@
|
||||
LOAD_RESOURCES_FROM_DIR=$PROJECT_DIR
|
||||
|
Antes Largura: | Altura: | Tamanho: 752 B |
|
Antes Largura: | Altura: | Tamanho: 183 B |
|
Antes Largura: | Altura: | Tamanho: 523 B |
|
Antes Largura: | Altura: | Tamanho: 1.6 KiB |
|
Antes Largura: | Altura: | Tamanho: 2.2 KiB |
|
Antes Largura: | Altura: | Tamanho: 5.8 KiB |
|
Antes Largura: | Altura: | Tamanho: 2.3 KiB |
|
Antes Largura: | Altura: | Tamanho: 6.0 KiB |
|
Antes Largura: | Altura: | Tamanho: 123 B |
|
Antes Largura: | Altura: | Tamanho: 126 B |
|
Antes Largura: | Altura: | Tamanho: 239 B |
|
Antes Largura: | Altura: | Tamanho: 1.6 KiB |
|
Antes Largura: | Altura: | Tamanho: 341 B |
|
Antes Largura: | Altura: | Tamanho: 411 B |
|
Antes Largura: | Altura: | Tamanho: 3.3 KiB |
|
Antes Largura: | Altura: | Tamanho: 175 B |
|
Antes Largura: | Altura: | Tamanho: 1.4 KiB |
|
Antes Largura: | Altura: | Tamanho: 90 B |
|
Antes Largura: | Altura: | Tamanho: 209 B |
|
Antes Largura: | Altura: | Tamanho: 212 B |
|
Antes Largura: | Altura: | Tamanho: 125 B |
|
Antes Largura: | Altura: | Tamanho: 144 B |
|
Antes Largura: | Altura: | Tamanho: 174 B |
|
Antes Largura: | Altura: | Tamanho: 193 B |
|
Antes Largura: | Altura: | Tamanho: 1.3 KiB |
|
Antes Largura: | Altura: | Tamanho: 7.0 KiB |
|
Antes Largura: | Altura: | Tamanho: 175 B |
|
Antes Largura: | Altura: | Tamanho: 1.7 KiB |