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); }