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

Я негодую, SetMinSize

December 23rd, 2009 Begemot

Заметил что после последнего апдейта транка, баг в программе – оказывается изменилась логика библиотеки. Я запоминаю и восстанавливаю при старте программы размеры главного окна, баг был в том, что после запуска не удавалось уменьшить размер окна – сделать его меньше чем оно было в прошлый раз. Оказалось wxFrame::Create(parent, id, _caption, pos, size, style); использует переданные size and pos для вызова SetMinSize(), там даже есть коммент

   // assume the user doesn’t want this window to shrink beneath its initial
    // size, this worked like this in wxWidgets 2.8 and before and generally
    // often makes sense for child windows (for top level ones it definitely
    // does not as the user should be able to resize the window)
    //
    // note that we can’t use IsTopLevel() from ctor

Хорошо хоть в той ревизии с которой я последний раз делал public release этого еще не было. Логика сего действия мне абсолютно непонятна…

В общем потихоньку переезжаю на тройку, тестирую, выгребаю несовместимости.

Posted in Использование | Tags: ,
Comments Off on Я негодую, SetMinSize


Облегчаем просмотр переменных в дебагере

December 23rd, 2009 Begemot

Надеюсь вы все читаете официальный wxBlog, даже не смотря на то что пишут туда редко и на английском. А если не читаете то вы сами себе злобные буратины. 🙂

Сегодня наткнулся там на полезнейшую информацию – от том как улучшить отображение wx типов в дебагере Visual Studio, в частности строк и многих других, теперь не обязательно “раскрывать” переменную в окне просмотра дебагера или во всплывающей подсказе, должно здорово экономить время. Подробнее Better display of wxTypes in MSVS debuggerBetter display of wxTypes in MSVS debugger.

Единственно что я этот код вставлял в самое начало секции [AutoExpand] так проще, не приходиться искать ее конец.

p.s А еще я знаю одну архиполезную фишку, я ее как раз сейчас тестирую, скоро расскажу 🙂


С иконками все хорошо :)

December 16th, 2009 Begemot

Я тут недавно обнаружил что MFC-визард создает неправильный код для работы с иконками и поэтому у меня в программе много лет была кривая иконка на самом видном месте. Решил проверить как дела в wxWidgets программах. Оказалось вариант

SetIcon

(wxICON(main)); // Give it an icon

Работает правильно – грузит как 32*32 так и 16*16 иконку из файла, так что можно не беспокоиться.

А возможность использовать png для меню\тулбаров – вообще просто супер.

Posted in Использование | Tags:
Comments Off on С иконками все хорошо :)


Между делом попробовал wxWidgets под Ubuntu

December 7th, 2009 Begemot

Выпало тут 4 часа в течении которых можно было работать только на ноуте. А там у меня недавно установленная убунта 9.10 х64. Сначала немного побаловался, поразбирался с системой (я вроде доволен) потом решил попробовать вх.

Поставил svn, выкачал trunk из репозитория, вспомнил о том, что как компилировать wxWidgets на линуксе я уже писал, по этой же инструкции собрал библиотеку, собрал пару примеров – clipboard, auidemo – и представляете себе, работает! 🙂

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


CreateStdDialogButtonSizer упрошает жизнь

November 21st, 2009 Begemot

В догонку к последнему посту, нашел еще CreateStdDialogButtonSizer  (этот метод правда есть в документации). Но раньше я почему то создавал кнопки в диалогах, пусть и с использованием wxStdDialogButtonSizer, но в ручную. А теперь можно вместо 12 строчек кода, писать всего две

if (wxSizer * buttonSizer = CreateStdDialogButtonSizer(wxOK | wxCANCEL))
             topSizer->Add(buttonSizer, 0, wxEXPAND | wxALL, 10);

повышая качество и читаемость, ляпота 🙂

Posted in Использование | Tags:
Comments Off on CreateStdDialogButtonSizer упрошает жизнь


CreateTextSizer, мелочь а приятно

November 21st, 2009 Begemot

“О сколько нам открытий чудных, готовит ковыряния миг” почти (с)

В сорцах либы нашел такой код

    topsizer->Add(CreateTextSizer(message), flagsBorder2);

Заинтересовался что такое CreateTextSizer(), в документации нету. В сорцах написанно

    // splits text up at newlines and places the
    // lines into a vertical wxBoxSizer
    wxSizer *CreateTextSizer( const wxString &message );

Решил что можно быстро и компактно размещать текст. В результате после следующего кода

wxSizerFlags flagsBorder;
flagsBorder.Border(wxALL, 10);
topSizer->Add(CreateTextSizer(_T("First line \nSecond Line \n\nNext")), flagsBorder);

Сразу четыре сайзера с текстом, но ведь точно такой же визуальный эффект дает и

wxStaticText * itemStaticText = new wxStaticText;
itemStaticText->Create(this, wxID_STATIC, _("First line \nSecond Line \n\nNext"), wxDefaultPosition, wxDefaultSize, 0);
topSizer->Add(itemStaticText, 0, wxGROW | wxALL, 10);

те же четыре строчки на экране, только в 1 сайзере.

Зачем и когда нужен  CreateTextSizer я так и не придумал, а у вас мысли есть?


Пару воскресных грабликов

October 26th, 2009 Begemot

Если вы используете проверку на запуск второго экземпляра и переходите на wxWidgets 3, то имейте ввиду что в wxConnection::OnExecute второй и третий параметр надо заменить на с wxChar * data, int size  на  const void * data, size_t size. Иначе не работает и выдает ошибку. Я заметил только спустя месяц использования\разработки двух своих  прог скомпиленных в тройке:)

И еще раньше битмап для картинки в меню можно было получить из главной иконки как wxIcon(wxT("main"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16), с тройкой под вистой\семеркой это код приводит к кривому отображению иконки, проблемы с прозрачностью, тоже стоит иметь ввиду.

Posted in Использование | Tags: ,
Comments Off on Пару воскресных грабликов


Тонкости…

October 2nd, 2009 Begemot

Собираюсь со следующих версий переводить программы (публичные релизы) на 3.0. Собрал с тройкой в принципе легко, некоторые явно видимые баги заметил\поправил сразу, пару багов запостил в trac и они уже тоже исправленны. Но все же решил сначала хотя бы 2-3 недели у себя погонять. И не зря 🙂

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

Испугался, думал я сломал в последней версии (представил как быть с пользователями…), потом оказалось бага только в версии собранной с тройкой. Еще несколько часов ковыряния – нашел где бага, еще часик смог стабильно воспроизвести – все-таки проблема в либе. В общем отписал в trac, сижу весь в надежде что все-таки поправят, а то я буду опечален.


Drag and Drop at wxTreeCtrl

September 26th, 2009 Begemot

Добавлял тут drag and drop к дереву, для своего легкого менеджера заметок, порядком намучался. А все оказывается не так и сложно, надо просто делать так как доктор прописал.

Задача была такая – есть дерево, хочу что бы перетаскивать можно было:

  1. Ветви внутри дерева
  2. Данные (текст) из дерева наружу
  3. Текст снаружи в дерево.

Read the rest of this entry »


О лени, багах и тулбарах

September 24th, 2009 Begemot

Человек ленив, увы.

Я давно жаловался на “баг” в тулбаре, была проблема с цветом фона под вистой, в тройке такая же проблема появилась уже и под XP. Я думал засабмитить баг, но лень моя нашептовала мне что не может быть что бы такого еще никто не заметил и не сообщил…

Когда в тройке эта проблема уже вылезла и в хп – я не выдержал, и поволынив еще недельку все-таки написал в багтрекер. Где мне быстро дали понять степень моего падения…

В общем бага была у меня, я использую AUI, проблема была в том что при добавлении тулбара в AUIManager, я указывал Resizable(false), в результате чего тулбар не растягивался на всю ширину окна. Resizable(true) тоже не выход – появляются визуальные артефакты, выкрутился так Resizable(false).MinSize(wxSize(1110, 10)):

itemFrame1->GetAuiManager().AddPane(pToolBar, wxAuiPaneInfo().ToolbarPane().Name(_T("TpplBarPane")).Top().Layer(10).Resizable(false).MinSize(wxSize(1110, 10)).Dockable(false).CaptionVisible(false).CloseButton(false).DestroyOnClose(false).Floatable(false).Gripper(false).Movable(false).PaneBorder(false));

Ну вот теперь красота, а ведь можно было эту проблему решить еще почти год назад… код то в продакшене работает, лень и пофигизм А теперь уже пора на wxAuiToolbar переходить, вроде же в тройке есть уже, буду смотреть в ближайшее время.