1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
#ifndef __YLISTBOX_H
#define __YLISTBOX_H
#include "ywindow.h"
#include "yscrollbar.h"
#include "yscrollview.h"
class YScrollView;
class YListItem {
public:
YListItem();
virtual ~YListItem();
YListItem *getNext();
YListItem *getPrev();
void setNext(YListItem *next);
void setPrev(YListItem *prev);
bool getSelected() { return fSelected; }
void setSelected(bool aSelected);
virtual int getOffset();
virtual ustring getText();
virtual ref<YIcon> getIcon();
private:
bool fSelected; // !!! remove this from here
YListItem *fPrevItem, *fNextItem;
};
class YListBox: public YWindow, public YScrollBarListener, public YScrollable {
public:
YListBox(YScrollView *view, YWindow *aParent);
virtual ~YListBox();
int addItem(YListItem *item);
int addAfter(YListItem *prev, YListItem *item);
void removeItem(YListItem *item);
virtual void configure(const YRect &r);
virtual bool handleKey(const XKeyEvent &key);
virtual void handleButton(const XButtonEvent &button);
virtual void handleClick(const XButtonEvent &up, int count);
virtual void handleDrag(const XButtonEvent &down, const XMotionEvent &motion);
virtual void handleMotion(const XMotionEvent &motion);
virtual bool handleAutoScroll(const XMotionEvent &mouse);
virtual void paint(Graphics &g, const YRect &r);
virtual void scroll(YScrollBar *sb, int delta);
virtual void move(YScrollBar *sb, int pos);
virtual bool isFocusTraversable();
bool hasSelection();
virtual void activateItem(YListItem *item);
YListItem *getFirst() const { return fFirst; }
YListItem *getLast() const { return fLast; }
int getItemCount();
YListItem *getItem(int item);
int findItemByPoint(int x, int y);
int findItem(YListItem *item);
int getLineHeight();
int maxWidth();
bool isSelected(int item);
bool isSelected(YListItem *item);
virtual int contentWidth();
virtual int contentHeight();
virtual YWindow *getWindow();
void focusSelectItem(int no) { setFocusedItem(no, true, false, false); }
void repaintItem(YListItem *item);
private:
YScrollBar *fVerticalScroll;
YScrollBar *fHorizontalScroll;
YScrollView *fView;
YListItem *fFirst, *fLast;
int fItemCount;
YListItem **fItems;
int fOffsetX;
int fOffsetY;
int fMaxWidth;
int fFocusedItem;
int fSelectStart, fSelectEnd;
bool fDragging;
bool fSelect;
static int fAutoScrollDelta;
bool isItemSelected(int item);
void selectItem(int item, bool sel);
void selectItems(int selStart, int selEnd, bool sel);
void paintItems(int selStart, int selEnd);
void clearSelection();
void setFocusedItem(int item, bool clear, bool extend, bool virt);
void applySelection();
void paintItem(int i);
void paintItem(Graphics &g, int n);
void resetScrollBars();
void freeItems();
void updateItems();
void autoScroll(int delta, const XMotionEvent *motion);
void focusVisible();
void ensureVisibility(int item);
#ifdef CONFIG_GRADIENTS
ref<YImage> fGradient;
#endif
};
extern ref<YPixmap> listbackPixmap;
#ifdef CONFIG_GRADIENTS
extern ref<YImage> listbackPixbuf;
#endif
#endif
|