О тонкостях, точках и запятых

March 26th, 2010 Begemot

Есть у меня модуль для проверки наличия обновлений. Скачивает с сайта тхт файлик, парсит и радует юзверя наличием информации о новой версии.

Периодически народ жаловался что у него не работает, у меня все работало, я конечно бил себя в грудь и грешил на фаерволы, в принципе основания были. Пока однажды вдруг не сломалось у меня.

Начал ковыряться, оказалось фаерволы не причем, вернее не всегда причем. Оказалось что “2.8” это не всегда 2.8, банально правда?:) Вроде бы известно, банально, но пока гром не грянет…

В общем решение вот:

bool wxString::ToCDouble(double * val)  const
Variant of ToDouble() always working in "C" locale.
Works like ToDouble() but unlike it this function expects the floating point number to be formatted always with the rules dictated by the "C" locale (in particular, the decimal point must be a dot), independently from the current application-wide locale (see wxLocale).


Удаление всех выбранных строк в wxListCtrl

March 24th, 2010 Begemot

На первый взгляд это кажется банальной процедурой, но у меня заработало только с третье или четвертой попытки, ибо есть особенности. Так что – code snippet :

void ClassName::OnDeleteClick(wxCommandEvent& event)
{
    long item = -1;
    while(true)
    {
        item = m_list->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
        if (item == wxNOT_FOUND) break;
        m_list->DeleteItem(item--);
    }
}

Updated: более лаконичная версия по мотивам комментариев

    long item = -1;
    while((item = m_list->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != wxNOT_FOUND)
        m_list->DeleteItem(item--);

Глава 15.4 Поддержка информации времени выполнения (Run-Time Type Information)

March 21st, 2010 Begemot

Как то эта глава далась мне особенно тяжко и во время перевода и во время вычитки, два раза я возвращался  к редактированию и все равно по моему все очень криво:( Единственное что глава вроде не сильно важная и не очень большая, так что думаю это не смертельно.

Read the rest of this entry »

Posted in Oбщее | Tags:
Comments Off on Глава 15.4 Поддержка информации времени выполнения (Run-Time Type Information)


маковское пессимистическое

March 19th, 2010 Begemot

чо-то я кажется сильно погорячился, когда думал о сроках портирования  на мак. Научился собирать и приступил непосредственно к написанию/портированию, и чем дальше тем меньше мне все это нравится…


Mac OS, CMake and wxWidgets

March 18th, 2010 Begemot

Привалило мне тут счастье в виде халтурки по клонированию одной утилиты с винды на мак. Поскольку  я давно мечтал портировать свой софт под мак (я же пишу на вхВиджетс!) не долго думая согласился. Поставил систему (установка MAC OS на хакинтош , первые впечатления) и потихоньку осваиваюсь. Даже завел новый блог – Dive Into Mac OS – микрозаметки новичка🙂

Почти день убил на то что бы скрестить исходники, wxWidgets, CMake и IDEs, с переменным успехом, Очень удачно получилось что пару недель назад я наконец решил освоить CMake  вместе с minGW под виндой, в рамках программы подготовки перехода на альтернативные оси, правда тогда я еще не знал что это будет так скоро:)

Теперь о плохом, модуль смейка FindWxWidgets под маком работает хреново (под виндой кстати тоже не идеально), это + почти полное не понимание того как это все работает под макосом\линуксом привели к тому что я провозился почти целый день,

Теперь кратко о проблемах с wxWidgets и CMake  под Mac OS и о том как удалось решить,

1. скомпилить вхВиджетс получилось но проинсталировать почему-то нет. то есть оно вроде инсталируется но wx-config –list возвращает только ту версию вхсов которая стояла в макое по умолчанию и не видит мою. решается указанием в CMake файле где брать нашу библиотеку

SET(wxWidgets_CONFIG_EXECUTABLE /…path…/build/my-mac/wx-config)

2. Для мака надо обязательно указывать архитектуру иначе ругается на либы

SET(CMAKE_OSX_ARCHITECTURES i386)

3. На всякий случай добавляем еще и (хотя точно не уверен что надо)

set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)

4. Теперь собственно поиск и подключения wxWidgets. (путь мы уже установили вверху)

После

find_package (wxWidgets COMPONENTS ${myWXWIDGETS_LIBS} REQUIRED)

include_directories(${wxWidgets_INCLUDE_DIRS})

Прошлось далать две ветви – одна под винду , вторая для APPLE, команда
add_definitions(${wxWidgets_DEFINITIONS})
у меня упорно не работает видимо что-то с форматом, думаю ошибка в модуле цмейка, под виндой, кстати так же не работает, но там  его можно было просто закоментировать – а тут не получается. под маком сделал так,
add_definitions(-I/volumes/shared/work/const/wxwidgets-trunk/build/my-mac/lib/wx/include/osx_carbon-unicode-static-2.9 -I/volumes/shared/work/const/wxwidgets-trunk/include -D_FILE_OFFSET_BITS=64 -D__WXMAC__ -D__WXOSX__ -D__WXOSX_CARBON__)
то есть указал то что мне выдает wx-config –cppflags…
5.  дальше имена библиотек, опять все через тернии – по нормальному. так :
target_link_libraries(${myPROJECT} ${wxWidgets_LIBRARIES})
не работает, только с ручным исправлением
STRING(REPLACE “wx_osx_carbonu_jpeg-2.9” “wxjpeg-2.9” wxWidgets_LIBRARIES “${wxWidgets_LIBRARIES}”)
STRING(REPLACE “wx_osx_carbonu_png-2.9” “wxpng-2.9” wxWidgets_LIBRARIES “${wxWidgets_LIBRARIES}”)
target_link_libraries(${myPROJECT} ${wxWidgets_LIBRARIES} -liconv)
Вот такие пироги.
P.S. Если вдруг есть кто знакомый с программированием под мак, и желающий провести небольшой экскурс\поотвечать в аське (#264684674) на глупые вопросы, буду признателен – а то тут так много непонятного :)))

wxWidgets utils

March 16th, 2010 Begemot

 

А вы знаете про набор вспомогательных функций в wxWidgets? загляните, есть много полезного.

Posted in Использование | Tags:
Comments Off on wxWidgets utils


Ода wxYield

March 11th, 2010 Begemot

Знаете ли вы о wxYield? Если нет, то радуйтесь, потому я что я даю вам в руки поистине мощнейший инструмент. Это маленькая функция, название и назначение которой, я все никак не могу запомнить (!), способна творить чудеса.

bool Yield(bool onlyIfNeeded = false)

Yields control to pending messages in the windowing system. This can be useful, for example, when a time-consuming process writes to a text window. Without an occasional yield, the text window will not be updated properly, and on systems with cooperative multitasking, such as Windows 3.1 other processes will not respond.

Caution should be exercised, however, since yielding may allow the user to perform actions which are not compatible with the current task. Disabling menu items or whole menus during processing can avoid unwanted reentrance of code: see ::wxSafeYield for a better function.

Note that Yield() will not flush the message logs. This is intentional as calling Yield() is usually done to quickly update the screen and popping up a message box dialog may be undesirable. If you do wish to flush the log messages immediately (otherwise it will be done during the next idle loop iteration), call wxLog::FlushActive.

Calling Yield() recursively is normally an error and an assert failure is raised in debug build if such situation is detected. However if the onlyIfNeeded parameter is true, the method will just silently return false instead.

Если вдруг у вас падает программа, при закрытии\выходе\в деструкторе и у вас есть окно. Обязательно попробуйте wxYield. Уже три раза я избавлялся от необъяснимых падений, просто добавив ее вызов, чудесно, не правда ли?:)

Последний раз был сегодня, программа падает при рестарте компьютера или выходе пользователя из системы, только на XP и только если у нас установлен PuntoSwitcher… я конечно всеми фибрами души грешил на последний, но все равно пытался найти и исправить ошибку. И что бы вы думали? wxYield  в деструкторе главного окна, спасла положение.

Странно падает программа?
Лишь ошибку видишь ты?
wxYeld расставь по коду,
и еще раз посмотри!

Экспромт родился:)


wxDemo

February 22nd, 2010 Begemot

Если еще не видели  wxDemo, то есть смысл посмотреть, даже если wxWidgets знаете и используете, а если только присматриваетесь – то обязательно.  Для быстрого предварительного ознакомления самое- то.

В одном месте собраны не больше описания, скриншоты, сорцы, демки. Тут есть не очень очевидный фокус, что бы посмотреть демо, надо перейти на вкладку Source Code и посмотреть в верхний правый угол. В общем, если надо что-то быстро глянуть – то подходящая вещь, мне всегда в хелпе по вх не хватало скриншотов…

Вот только с версией не понятки, на сайте написано 2.8 поддерживает, а в самой программе в справке уже 2.9, но что-то я сумневаюсь..:)

Posted in Oбщее
Comments Off on wxDemo


Глава 15.4 Сообщения об ошибках (Error Reporting)

February 16th, 2010 Begemot

wxWidgets дает нам весьма развитые средства для работы с сообщениями об ошибках, ведению лога. Не знали? А надо бы знать:)

Глава 15.4  Сообщения об ошибках (Error Reporting)

Read the rest of this entry »


Поддержи фреймворк!

February 9th, 2010 Begemot

Пишите шароварные или фриварные (но хорошие!) программы на wxWidgets, Qt или чем-нибудь еще? Тогда идите поддержите свой любимый фреймворк:)

Идти сюда

Posted in Oбщее
Comments Off on Поддержи фреймворк!