Zip-уем данные на лету

September 2nd, 2008 Begemot

Встроенные удобства это приятно!:)

Пишу данные в базу, возникла мысль что архивирование может быть очень кстати, попробывал – действительно стало лучше. Арихивирование благодаря встроенным средствам wxWidgets делается легко и быстро. Просто пропускаем данные через wxZlibOutputStream который архивирует\распаковывает на лету.
[sourcecode language=”cpp”]
void SavecbContentToStream(wxMemoryOutputStream &memout, bool zlib/*=false*/) const
{
scoped_ptr dos;
scoped_ptr zlibstr;

if(zlib)
{
zlibstr.reset(new wxZlibOutputStream(memout, -1, wxZLIB_GZIP));
dos.reset(new wxDataOutputStream (*zlibstr));
}
else
dos.reset(new wxDataOutputStream (memout));

// write some data …
*dos <<(wxUint16)1 <<(wxUint16)cbContent.size(); // ... } [/sourcecode] Функция записывает данные в переданный буфер с опциональным архивированием их.


Новый блог про разработку для мобильных устройств

August 4th, 2008 Begemot

T-Rex оказывает разродился новым блогом про разработку под мобильные устройства, если я правильно понимаю то упор будет сделан на разработку с использованием wxWidgets, что не может не радовать:)

Уже есть пару полезных материалов, по крайней мере, про сборку SQLite для   Windows Mobile мне бы скоро пришлось у него спрашивать:)

Так что добавляйте в свои ридеры.

Posted in Oбщее
Comments Off on Новый блог про разработку для мобильных устройств


MiniFrame Looks Terrible in Gnome

August 2nd, 2008 Begemot

If you ever want to create a cross-platform program with an interface similar to Photoshop’s, i.e. using palettes with different tools, don’t use wxWidgets. The only thing that comes close to that sort of palette is wx’s MiniFrame, which can only minimize / iconize on Windows. In GNOME, the MiniFrame looks terrible, especially with Compiz enabled. It cannot be….

http://gayhacker.wordpress.com/2008/07/11/the-wxminiframe-problem/


Переведенные главы книжки по программированию на wxWidgets

July 22nd, 2008 Begemot

В продолжение разговор про перевод книги Cross-Platform GUI Programming with wxWidgets By Julian Smart, Kevin Hock, Stefan Csomor. Несколько глав уже переведенны и выложенны  у T-Rexa, но там ссылки на pdf файлы ведут на депозитфайлс, с которого качать более чем гемморойно. Поэтому по взаимной договоренности, я дублирую их на своем хостинге.

Итак переведенные главы:

 


Перевод Книги по wxWidgets

July 20th, 2008 Begemot

Вот странное все-таки существо человек:) Еще надавно я жаловался что я плохо работаю, занимаюсь чем угодно, но только не тем основным проектом которым надо и спрашивал у психолога что делать, И вот на тебе, на фоне всего этого, да еще и лета с его жарой, ленью и разъездами, я, мечтая убить кучу лишних полумертвых проектов которые я повешал себе на шею, ввязываюсь в новую “авантюру” –принимаю предложение Алексея помочь ему с переводом книги по программированию на wxWidgets – Cross-Platform GUI Programming with wxWidgets. И это при том что я ни разу не переводчик, и даже не чувак хорошо знающий английский или русский языки:)

Часть книги уже переведенна Алексеем, остальное сейчас в переводе. Теперь переводят уже целых два переводчика, так что дело должно пойти быстрее. Вот бы только лето кончилось:) Ждите.


Явно Устанавливайте Имя Приложения: SetAppName

July 18th, 2008 Begemot

При тестировании новой версии программы, наткнулся на странное поведение. Если Cпереименовать .ехе – она забывает все свои настройки. Казалось бы странно, а на самом деле доку читать надо было внимательнее.

Настройки я храню, в конфиг файле

dataPath = wxStandardPaths().GetUserDataDir() + wxFileName::GetPathSeparator(); //стандартная папка с данным /application data/..

Но GetUserDataDir возвращает папку основываясь на AppName. Если вы не задаете его явно, то это имя ехе файла…

В принципе можно считать это бонусом:) Просто переименовав ехе, пользователь может получить две работающие копии с разными настройками и\или обойти запрет на запуск 2 экземпляров.

Но если это вам не надо, возьмите за правило в самом-самом начале программы использовать:
[sourcecode language=’cpp’]
SetAppName(wxT(“YourAppName”)); //before GetUserDataDir()
SetVendorName(wxT(“YourVendorName”));

[/sourcecode]

Как бонус потом можете использовать в коде wxGetApp().GetAppName(), wxGetApp().GetVendorName() , повышая переносимость кода.

Posted in Программирование | Tags:
Comments Off on Явно Устанавливайте Имя Приложения: SetAppName


Кто украл Set/KillFocus?

July 17th, 2008 Begemot

Добавил 

EVT_KILL_FOCUS(MainFrame::OnKillFocus)

EVT_SET_FOCUS(MainFrame::OnKillFocus)

Не приходят, вообще. Приложение с AUI. Куда копать?


Теперь про wxWidgets будет тут

July 16th, 2008 Begemot

В связи с тем что мне надоел блоггер как платформа, может он неудобный, а может я просто не умею его готовить, но вообщем я решил переехать сюда. Все записи блога и комменты импортированны с блоггера. Дальнейшая активность будет тут.


Достало восстанавления лайота в AUI

July 9th, 2008 Begemot

Как же меня достал механизм восстанавления лайота в AUI, который не может отследить ситуацию что реальный лайот  у нас поменялся (добавился новый элемент), и все косячит:(


wxMenu с иконками и обход выделенных атемов в wxListCtrl

June 16th, 2008 Begemot

Пара маленьких функий, может кому пригодится.

Был удивлен что у wxMenu::Append нету для добавления меню с картинками. Пришлось писать самому

wxMenuItem * MainFrame::AppendMenuItemWithImage(wxMenu* parentMenu,

int id, const wxString& text, const wxString& helpString, const wxBitmap& checked, const wxBitmap& unchecked, wxItemKind kind, wxMenu* subMenu)

{

wxMenuItem* menuItem =

new wxMenuItem(parentMenu, id, text, helpString, kind, subMenu);

menuItem->SetBitmaps(checked, unchecked);

parentMenu->Append(menuItem);

return menuItem;

}

Использование:

wxMenu* itemMenu = new wxMenu;

AppendMenuItemWithImage(itemMenu, ID_HIDE, _(“&Hide In Tray\tEsc”), _T(“”), wxBitmap(hide_xpm));

AppendMenuItemWithImage(itemMenu, wxID_EXIT, _(“E&xit\tAlt-x”), _T(“”), wxBitmap(exit_xpm));

menuBar->Append(itemMenu, _(“&File”));


И еще один маленький хелпер для удобной работы  с выделенными айтемами в wxListCtrl:

vector<

long> MainFrame::GetListCtrlItems(const wxListCtrl * lcont, int state /*= wxLIST_STATE_DONTCARE*/, int geometry /*= wxLIST_NEXT_ALL*/, long item/*=-1*/)

{

vector<

long> items;

items.resize(lcont->GetSelectedItemCount());

// надеюсь так быстрее чем push_back

long ind=0;

do

{

item= lcont->GetNextItem(item, geometry, state);

if (item!=-1) items[ind++]=item; //items.push_back(item);

}

while( item != -1 );

return items;

}

Использование:

vector<

long> items=GetListCtrlItems(m_listFormat, wxLIST_STATE_SELECTED);

BOOST_FOREACH(

long item, items)

{

str+=m_listFormat->GetItemText(item)+wxT(

“\n”);

}

Иногда удобнее работать с вектором, хотя это я просто сейчас с STL знакомлюсь, вот и выпендриваюсь:)