Тема: Less Toolkit
Показать сообщение отдельно
Старый 17.04.2009, 19:55   #26 (Ссылка на пост)
Lester
Гаденыш
 
Аватар для Lester
Пол:
 
Активность Longevity
3/20 16/20
Today Сообщения
0/5 sssss4648
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея: 0
Вес репутации: 78 Lester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторы
Несколько моих бредовых идей по стилю написания кода гуи( ес-но это альтернативный вариант и пользоваться им необязательно ):

Пример цельного куска кода:
PHP код:
    // IDs
    
enum
    
{
        
ID_ITEMS,
        
ID_CHECK_ALL,
        
ID_UNCHECK_ALL
    
};

    
// Create
    
Dialog dlg =
    
DIALOGcaption );
    
VLAYOUT
        LABEL
ID_ANY"Select one of:" )
        
HLAYOUT
            CHK_LISTBOX
ID_ITEMSchoices )
            
VLAYOUT
                BMP_BUTTON
ID_CHECK_ALLplus_xpm );
                
BMP_BUTTONID_UNCHECK_ALLminus_xpm );
            
END_LAYOUT
        END_LAYOUT
        STD_BUTTONS
ID_OK ID_CANCEL );
    
END_LAYOUT

    
// Pointers
    
CheckListBoxitems = (CheckListBox*) dlg->FindByIDID_ITEMS );
    
BitmapButtoncheck = (BitmapButton*) dlg->FindByIDID_CHECK_ALL );
    
BitmapButtonuncheck = (BitmapButton*) dlg->FindByIDID_UNCHECK_ALL );

    
// Actions
    
check->SetActionID_ITEMSACTION_CHKLISTBOX_CHECK_ALL );
    
uncheck->SetActionID_ITEMSACTION_CHKLISTBOX_UNCHECK_ALL );

    
// Update
    
check->EnableIfID_ITEMSIF_NON_EMPTY );
    
uncheck->EnableIfID_ITEMSIF_NON_EMPTY ); 
теперь по шагам:

1. список ID

PHP код:
    enum
    
{
        
ID_ITEMS,
        
ID_CHECK_ALL,
        
ID_UNCHECK_ALL
    
}; 
тут все понятно, каждый виджет может иметь уникальный ID, которые мы описываем перед созданием гуи, ес-но есть глобальный список преодпределенных ID - например ID_ANY

2. Создание гуи:

PHP код:
    Dialog dlg =
    
DIALOGcaption );
    
VLAYOUT
        LABEL
ID_ANY"Select one of:" )
        
HLAYOUT
            CHK_LISTBOX
ID_ITEMSchoices )
            
VLAYOUT
                BMP_BUTTON
ID_CHECK_ALLplus_xpm );
                
BMP_BUTTONID_UNCHECK_ALLminus_xpm );
            
END_LAYOUT
        END_LAYOUT
        STD_BUTTONS
ID_OK ID_CANCEL );
    
END_LAYOUT 
тут с помощью макросов создаются сайзеры и виджеты, думаю тут тоже все ясно

3. получение указателей на виджеты

PHP код:
    CheckListBoxitems = (CheckListBox*) dlg->FindByIDID_ITEMS );
    
BitmapButtoncheck = (BitmapButton*) dlg->FindByIDID_CHECK_ALL );
    
BitmapButtonuncheck = (BitmapButton*) dlg->FindByIDID_UNCHECK_ALL ); 
4. назначение действий

PHP код:
    check->SetActionID_ITEMSACTION_CHKLISTBOX_CHECK_ALL );
    
uncheck->SetActionID_ITEMSACTION_CHKLISTBOX_UNCHECK_ALL ); 
здесь мы можем привязать одни виджеты к другим - у каждого типа виджетов есть набор действий( которые в принципе дублируют методы этого типа ), мы можем связать дефолтное действие для одного виджета на произвольное действие другого, в том числе можем указать аргумент для действия, например так:

button->SetAction( ID_LABEL, ACTION_LABEL_SET_TEXT, "Sample Text" );

5. автоматическое обновление

PHP код:
    // Update
    
check->EnableIfID_ITEMSIF_NON_EMPTY );
    
uncheck->EnableIfID_ITEMSIF_NON_EMPTY ); 
здесь мы указываем, что кнопки будут активны только, если виджет с ID - ID_ITEMS не пустой( в данном случае список имеет одну или несколько строк ), варианты:

check->EnableIf( ID_TEXT, IF_VALUE_EQUAL, "Sample" );
check->ShowIf( ID_CHECKBOX, IF_CHECKED );
label->LabelIf( ID_CHECKBOX, IF_CHECKED, "Checked", "Not Checked" );
checkbox->CheckIf( ID_TEXT, IF_NON_EMPTY );


Все это, чтоб не писать лишний раз обработчики событий( ввод текста, нажатие клавиш, выбор чекбокса и т.п. ).

Lester добавил 18.04.2009 в 12:20
насчет:

PHP код:
check->EnableIfID_TEXTIF_VALUE_EQUAL"Sample" );
check->ShowIfID_CHECKBOXIF_CHECKED );
label->LabelIfID_CHECKBOXIF_CHECKED"Checked""Not Checked" );
checkbox->CheckIfID_TEXTIF_NON_EMPTY ); 
т.к. у многих виджетов будет использоваться практически одно и то же свойство( IF_CHECKED для чекбоксов, IF_NON_EMPTY для полей ввода и т.д. ), то добавил сокращенные варианты:

PHP код:
check->ShowIfID_CHECKBOX );
checkbox->CheckIfID_TEXT ); 
ес-но это все будет отражено в моем IDE в редакторе GUI
__________________
- Слава Україні! - закричали они, вместо приветствия.
- Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским?

Последний раз редактировалось Lester, 18.04.2009 в 11:23. Причина: Добавлено сообщение
Lester вне форума  
Ответить с цитированием