Имя пользователя:
Пароль:
 

Название темы: Callback - Опять в раздумьях
Показать сообщение отдельно
pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


вот так у меня выглядит редактор табличек:
Код: Выделить весь код
class ListModel
{
public:
    virtual void setFocused(item_id_t /*id*/) {};
    virtual void setSelected(item_id_t /*id*/, bool) {};
};

class TableEdit;

class TableEditModel
{
public:
    virtual void erase(const std::vector<item_id_t>&) = 0;
    virtual void insert() = 0;
    virtual void select(item_id_t) = 0;
    virtual void setFocused(item_id_t) = 0;
};

class TableEditView : public ListView, ListModel
{
    TableEdit* fpanel;
    unsigned fcount;

    void perform(Message&);
    void setFocused(item_id_t);
    void setSelected(item_id_t, bool);
public:
    TableEditView(TableEdit* panel);
};

class TableEdit : public Panel, ListModel
{
    TableEditModel* fmodel;
    friend class TableEditView;
    void focusItem(item_id_t);
    void setFocused(item_id_t);
    void eraseSelected();

public:
    enum {
        action_select,
        action_insert,
        action_erase
    };

    ImageList   images;
    LineLabel   label;
    TableEditView listview;

protected:
    ToolBar     toolbar;
    GridLayout  layout;

public:
    TableEdit(Panel&, TableEditModel* model);
    bool doubleClick(Window*);
};
от маленького ListModel (реагирует на нажатия кнопок toolbar) наследуется огромный Panel, который потом ещё пополнять можно. Единственное, что - не могу придумать как грамотно расшарить images, label и listview для заполнения. В идеале - любым классом (например формой, на которой три таких таблички).

Отправлено: 14:41, 31-05-2006 | #10

Название темы: Callback - Опять в раздумьях