Beispiel #1
0
void DocumentView::build_widgets() {
    scrolled_window_.add(view_);
    view_.set_buffer(buffer_);

    view_.signal_populate_popup().connect(sigc::mem_fun(this, &DocumentView::populate_popup));

    auto manager = Gsv::StyleSchemeManager::get_default();
    view_.get_source_buffer()->set_style_scheme(manager->get_scheme("delimit"));

    auto provider = Gsv::CompletionWords::create("", Glib::RefPtr<Gdk::Pixbuf>());
    provider->register_provider(buffer_);
    provider->property_priority().set_value(1);
    view_.get_completion()->add_provider(provider);
    view_.get_completion()->signal_show().connect([&]() { completion_visible_ = true; });
    view_.get_completion()->signal_hide().connect([&]() { completion_visible_ = false; });

    auto coverage_attrs = Gsv::MarkAttributes::create();
    Gdk::RGBA coverage_colour;
    coverage_colour.set_rgba(1.0, 0.5, 0, 0.12);
    coverage_attrs->set_background(coverage_colour);
    view_.set_mark_attributes("coverage", coverage_attrs, 0);

    auto linter_attrs = Gsv::MarkAttributes::create();
    linter_attrs->set_icon_name("dialog-error");
    g_signal_connect(linter_attrs->gobj(), "query-tooltip-markup", G_CALLBACK(get_tooltip), view_.gobj());
    view_.set_mark_attributes("linter", linter_attrs, 10);

    auto breakpoint = Gsv::MarkAttributes::create();
    breakpoint->set_icon_name("stop");
    view_.set_mark_attributes("breakpoint", breakpoint, 11);
    view_.add_events(Gdk::BUTTON_PRESS_MASK);
    view_.signal_button_press_event().connect([&](GdkEventButton* evt) -> bool {

        if(!buffer_->get_language() || buffer_->get_language()->get_name() != "Python") {
            return false;
        }

        if(evt->type == GDK_2BUTTON_PRESS && evt->window == view_.get_window(Gtk::TEXT_WINDOW_LEFT)->gobj()) {
            //The user clicked within the left gutter
            if(evt->button == 1) {
                //Left click
                int x_buf, y_buf;

                view_.window_to_buffer_coords(
                    Gtk::TEXT_WINDOW_LEFT,
                    int(evt->x), int(evt->y),
                    x_buf, y_buf
                );

                //Line bounds
                Gtk::TextBuffer::iterator iter;
                int line_top;
                view_.get_line_at_y(iter, y_buf, line_top);
                auto mark_list = buffer_->get_source_marks_at_iter(iter, "breakpoint");
                if(!mark_list.empty()) {
                    for(auto& mark: mark_list) {
                        buffer_->delete_mark(mark);
                    }

                    auto end_iter = iter;
                    end_iter.forward_line();

                    unicode line = buffer_->get_slice(iter, end_iter).c_str();
                    if(line.contains("import ipdb; ipdb.set_trace()")) {
                        buffer_->erase(iter, end_iter);
                    }
                } else {
                    buffer_->create_source_mark("breakpoint", iter);

                    auto end_iter = iter;
                    end_iter.forward_line();

                    unicode line_text = buffer_->get_slice(iter, end_iter).c_str();

                    uint32_t i = 0;
                    for(; i < line_text.length(); ++i) {
                        if(line_text[i] != ' ' && line_text[i] != '\t') {
                            break;
                        }
                    }

                    auto indentation = line_text.slice(nullptr, i);
                    auto replacement_text = _u("{0}import ipdb; ipdb.set_trace();\n").format(indentation);
                    buffer_->insert(iter, replacement_text.encode());
                }
            }
        }
        return false;
    });

    apply_settings("text/plain");

    scrolled_window_.show_all();
}
/* JAVADOC COMMENT ELIDED */
KNIEXPORT KNI_RETURNTYPE_INT
    Java_com_sun_j2me_location_PlatformLocationProvider_open() {

    MidpReentryData *info = NULL;
    ProviderInfo *pInfo = NULL;
    jsr179_result res;
    jsr179_handle pProvider = NULL;
    jint provider = 0;
    
    KNI_StartHandles(1);
    GET_PARAMETER_AS_PCSL_STRING(1, name)
    info = (MidpReentryData*)SNI_GetReentryData(NULL);
    if (info == NULL) {
        res = jsr179_provider_open(name, &pProvider);
        switch (res) {
            case JSR179_STATUSCODE_OK:
                /* handler returned immediatelly */
                provider = (jint)pProvider;
                register_provider(provider);
                break;
            case JSR179_STATUSCODE_INVALID_ARGUMENT:
                /* wrong provider name */
                KNI_ThrowNew(midpIllegalArgumentException, 
                            "wrong provider name");
                break;
            case JSR179_STATUSCODE_FAIL:
                /* fail */
                KNI_ThrowNew(midpIOException, "open failed");
                break;
            case JSR179_STATUSCODE_WOULD_BLOCK:
                /* wait for javanotify */
                provider = (jint)pProvider;
                pInfo = register_provider(provider);
                if (pInfo != NULL) {
                    pInfo->locked = KNI_TRUE;
                }
                lock_thread(JSR179_EVENT_OPEN_COMPLETED, provider);
                break;
            default:
                break;
        }
    } else {
        /* Second call for this thread - finish open */
        if (info->status == JSR179_STATUSCODE_OK) {
            /* Provider opened successfully */
            provider = info->descriptor;
            pInfo = getProviderInfo(provider);
            if (pInfo != NULL) {
                pInfo->locked = KNI_FALSE;
            }
        } else {
            /* Provider open failed*/
            unregister_provider(provider);
            provider = 0;
        }
    }

    RELEASE_PCSL_STRING_PARAMETER
    KNI_EndHandles();
    KNI_ReturnInt(provider);
}