diff --git a/CMakeLists.txt b/CMakeLists.txt index 8eceb87..841ea23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,15 @@ file(GLOB_RECURSE SOURCES ########################################################## add_executable(${PROJECT_NAME} ) +# После сборки — разделить символы и приложение +add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Extracting debug symbols..." + COMMAND objcopy --only-keep-debug ${PROJECT_NAME} ${PROJECT_NAME}.debug + COMMAND objcopy --strip-debug ${PROJECT_NAME} + COMMAND objcopy --add-gnu-debuglink=${PROJECT_NAME}.debug ${PROJECT_NAME} + COMMENT "Split debug symbols into separate .debug file" + VERBATIM +) target_compile_definitions(${PROJECT_NAME} PRIVATE $<$:_DEBUG>) target_sources(${PROJECT_NAME} PUBLIC pgAdmin3.cpp ${SOURCES}) if(CROSS_COMPILE STREQUAL "Windows") diff --git a/ctl/ctlSQLGrid.cpp b/ctl/ctlSQLGrid.cpp index 724bbcb..c83856a 100644 --- a/ctl/ctlSQLGrid.cpp +++ b/ctl/ctlSQLGrid.cpp @@ -522,7 +522,7 @@ int ctlSQLGrid::CopyTableToHtml(wxString htmlquery) { if (isRowsArray) rowPos = rows.Item(i); if (GetRowSize(rowPos) == 0) continue; htm += "\n"; - htm += wxString::Format("
%d
", rowPos + 1); + htm += wxString::Format("
%ld
", rowPos + 1); for (int c = 0; c < cols.Count(); c++) { wxString text = GetCellValue(rowPos, cols[c]); htm += wxString::Format("
%s
", c, escapeHtml(text, true)); diff --git a/include/utils/popuphelp.h b/include/utils/popuphelp.h index 212e36c..80d98bb 100644 --- a/include/utils/popuphelp.h +++ b/include/utils/popuphelp.h @@ -192,6 +192,42 @@ public: if (event.GetKeyCode() == WXK_UP) htmlWindow->ScrollLines(-1); if (event.GetKeyCode() == WXK_HOME) htmlWindow->ScrollPages(-1000); if (event.GetKeyCode() == WXK_END) htmlWindow->ScrollPages(1000); + //std::cout << "key code " << event.GetKeyCode() << " " << std::endl; + if (event.GetKeyCode() == 'S') { + wxSize clientSize = this->GetClientSize(); + // Создаём битмап того же размера + wxBitmap bitmap(clientSize.x, clientSize.y, -1); // -1 — лучший формат для экрана + + // Создаём DC для рисования в битмап + wxMemoryDC memDC; + memDC.SelectObject(bitmap); + + // Очищаем фон (опционально, если окно не полностью перерисовано) + memDC.SetBackground(*wxWHITE_BRUSH); + memDC.Clear(); + + // Используем wxClientDC для чтения содержимого окна + wxClientDC clientDC(this); + // Переносим данные с clientDC в memDC (копируем прямоугольник) + // Важно: координаты — относительно окна! + memDC.Blit(0, 0, clientSize.x, clientSize.y, &clientDC, 0, 0); + + // Освобождаем DC + memDC.SelectObject(wxNullBitmap); + // Открываем буфер обмена + if (wxTheClipboard->Open()) + { + // Добавляем данные (можно добавить несколько форматов, если нужно) + wxDataObjectComposite* dataobj = new wxDataObjectComposite(); + dataobj->Add(new wxBitmapDataObject(bitmap)); + wxTheClipboard->SetData(dataobj); + wxTheClipboard->Close(); + } + else + { + wxLogError("No open clipboard."); + } + } }); diff --git a/pgAdmin3.cpp b/pgAdmin3.cpp index 5d98b2e..711d391 100644 --- a/pgAdmin3.cpp +++ b/pgAdmin3.cpp @@ -429,7 +429,7 @@ bool pgAdmin3::OnInit() dialogTestMode = true; // Setup the image handlers and appearance factory before we do any GUI or config stuff - ::wxInitAllImageHandlers(); + //::wxInitAllImageHandlers(); appearanceFactory = new pgAppearanceFactory();