Compatibility updates step 1.

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@815 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
coppro
2008-01-05 22:37:22 +00:00
parent aec798b8f6
commit 692ff43573
13 changed files with 866 additions and 825 deletions
+25 -42
View File
@@ -18,10 +18,6 @@ DEFINE_EVENT_TYPE(EVENT_GALLERY_ACTIVATE);
// ----------------------------------------------------------------------------- : GalleryList
const int MARGIN = 1; // margin between items (excluding border)
const int BORDER = 1; // border aroung items
const int SPACING = MARGIN + 2*BORDER; // distance between items
GalleryList::GalleryList(Window* parent, int id, int direction, bool always_focused)
: wxPanel(parent, id, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxWANTS_CHARS | (direction == wxHORIZONTAL ? wxHSCROLL : wxVSCROLL) )
, selection(NO_SELECTION)
@@ -72,19 +68,6 @@ wxPoint GalleryList::itemPos(size_t item) const {
// ----------------------------------------------------------------------------- : Scrolling & sizing
int GalleryList::visibleEnd() const {
return visible_start + mainSize(GetClientSize());
}
int GalleryList::itemStart(size_t item) const {
return (int)item * (mainSize(item_size) + SPACING);
}
int GalleryList::itemEnd(size_t item) const {
return (int)(item + 1) * (mainSize(item_size) + SPACING) + MARGIN;
}
int GalleryList::mainSize(wxSize s) const {
return direction == wxHORIZONTAL ? s.x : s.y;
}
void GalleryList::scrollTo(int top, bool update_scrollbar) {
wxSize cs = GetClientSize();
int total_height = itemEnd(itemCount() - 1);
@@ -101,12 +84,12 @@ void GalleryList::scrollTo(int top, bool update_scrollbar) {
}
}
void GalleryList::updateScrollbar() {
scrollTo(visible_start, false);
// how many lines fit on the screen?
void GalleryList::updateScrollbar() {
scrollTo(visible_start, false);
// how many lines fit on the screen?
int screen_height = mainSize(GetClientSize());
int total_height = itemEnd(itemCount() - 1);
// set the scrollbar parameters to reflect this
int total_height = itemEnd(itemCount() - 1);
// set the scrollbar parameters to reflect this
SetScrollbar(direction, visible_start, screen_height, total_height);
}
@@ -114,26 +97,26 @@ void GalleryList::RefreshItem(size_t item) {
if (item >= itemCount()) return;
RefreshRect(wxRect(itemPos(item),item_size).Inflate(BORDER,BORDER), false);
}
void GalleryList::onScroll(wxScrollWinEvent& ev) {
wxEventType type = ev.GetEventType();
if (type == wxEVT_SCROLLWIN_TOP) {
scrollTo(0);
} else if (type == wxEVT_SCROLLWIN_BOTTOM) {
scrollTo(INT_MAX);
} else if (type == wxEVT_SCROLLWIN_LINEUP) {
scrollTo(visible_start - (mainSize(item_size) + SPACING));
} else if (type == wxEVT_SCROLLWIN_LINEDOWN) {
scrollTo(visible_start + (mainSize(item_size) + SPACING));
} else if (type == wxEVT_SCROLLWIN_PAGEUP) {
scrollTo(visible_start - visibleEnd() + mainSize(item_size));
} else if (type == wxEVT_SCROLLWIN_PAGEDOWN) {
scrollTo(visibleEnd() - mainSize(item_size));
} else {
scrollTo(ev.GetPosition());
}
}
void GalleryList::onScroll(wxScrollWinEvent& ev) {
wxEventType type = ev.GetEventType();
if (type == wxEVT_SCROLLWIN_TOP) {
scrollTo(0);
} else if (type == wxEVT_SCROLLWIN_BOTTOM) {
scrollTo(INT_MAX);
} else if (type == wxEVT_SCROLLWIN_LINEUP) {
scrollTo(visible_start - (mainSize(item_size) + SPACING));
} else if (type == wxEVT_SCROLLWIN_LINEDOWN) {
scrollTo(visible_start + (mainSize(item_size) + SPACING));
} else if (type == wxEVT_SCROLLWIN_PAGEUP) {
scrollTo(visible_start - visibleEnd() + mainSize(item_size));
} else if (type == wxEVT_SCROLLWIN_PAGEDOWN) {
scrollTo(visibleEnd() - mainSize(item_size));
} else {
scrollTo(ev.GetPosition());
}
}
void GalleryList::onSize(wxSizeEvent& ev) {
update();
ev.Skip();
+19 -7
View File
@@ -73,25 +73,37 @@ class GalleryList : public wxPanel {
wxPoint itemPos(size_t item) const;
/// Scroll to the given position (note: 'top' can also mean 'left')
void GalleryList::scrollTo(int top, bool update_scrollbar = true);
void scrollTo(int top, bool update_scrollbar = true);
/// Update the scrollbar(s)
void GalleryList::updateScrollbar();
void updateScrollbar();
/// Redraw just a single item
void GalleryList::RefreshItem(size_t item);
void RefreshItem(size_t item);
/// First visible pixel position
int visible_start;
/// First no-longer-visible pixel position
inline int GalleryList::visibleEnd() const;
inline int visibleEnd() const {
return visible_start + mainSize(GetClientSize());
}
/// Pixel position of an item
inline int GalleryList::itemStart(size_t item) const;
inline int GalleryList::itemEnd(size_t item) const;
inline int itemStart(size_t item) const {
return (int)item * (mainSize(item_size) + SPACING);
}
inline int itemEnd(size_t item) const {
return (int)(item + 1) * (mainSize(item_size) + SPACING) + MARGIN;
}
/// Main component of a size (i.e. in the direction of this list)
inline int GalleryList::mainSize(wxSize s) const;
inline int mainSize(wxSize s) const {
return direction == wxHORIZONTAL ? s.x : s.y;
}
protected:
/// Send an event
void sendEvent(WXTYPE type);
static const int MARGIN = 1; // margin between items (excluding border)
static const int BORDER = 1; // border aroung items
static const int SPACING = MARGIN + 2*BORDER; // distance between items
};
// ----------------------------------------------------------------------------- : EOF
+53 -53
View File
@@ -224,11 +224,11 @@ void TreeList::onChar(wxKeyEvent& ev) {
expand(selection, true);
}
}
break;
} case WXK_PAGEUP: case WXK_PRIOR: {
ScrollToLine(first_line > visible_lines_t ? first_line - visible_lines_t : 0);
break;
} case WXK_PAGEDOWN: case WXK_NEXT: {
break;
} case WXK_PAGEUP: {
ScrollToLine(first_line > visible_lines_t ? first_line - visible_lines_t : 0);
break;
} case WXK_PAGEDOWN: {
ScrollToLine(first_line + visible_lines_t);
break;
} case WXK_HOME: {
@@ -272,56 +272,56 @@ void TreeList::onLeftDClick(wxMouseEvent& ev) {
// ----------------------------------------------------------------------------- : TreeList : Copy of VScrolledWindow
void TreeList::ScrollToLine(size_t line) {
// determine the real first line to scroll to: we shouldn't scroll beyond the end
line = (size_t)max((int)line, 0);
line = (size_t)min((int)line, max(0, (int)(total_lines - visible_lines_t)));
// nothing to do?
if (line == first_line) return;
first_line = line;
UpdateScrollbar();
// determine the real first line to scroll to: we shouldn't scroll beyond the end
line = (size_t)max((int)line, 0);
line = (size_t)min((int)line, max(0, (int)(total_lines - visible_lines_t)));
// nothing to do?
if (line == first_line) return;
first_line = line;
UpdateScrollbar();
Refresh(false);
}
void TreeList::UpdateScrollbar() {
// how many lines fit on the screen?
int h = GetClientSize().y - header_height;
visible_lines = (h + item_height - 1) / item_height;
visible_lines_t = h / item_height;
// set the scrollbar parameters to reflect this
SetScrollbar(wxVERTICAL, (int)first_line, (int)visible_lines_t, (int)total_lines);
}
void TreeList::RefreshLine(size_t line) {
if (line < first_line || line >= first_line + visible_lines) return;
// calculate the rect occupied by this line on screen
wxRect rect;
rect.x = 0;
rect.y = header_height + (int)(line - first_line) * item_height;
rect.width = GetClientSize().x;
rect.height = item_height;
// do refresh it
RefreshRect(rect, false);
}
void TreeList::onScroll(wxScrollWinEvent& ev) {
wxEventType type = ev.GetEventType();
if (type == wxEVT_SCROLLWIN_TOP) {
ScrollToLine(0);
} else if (type == wxEVT_SCROLLWIN_BOTTOM) {
ScrollToLine(total_lines);
} else if (type == wxEVT_SCROLLWIN_LINEUP) {
ScrollToLine(first_line > 0 ? first_line - 1 : 0);
} else if (type == wxEVT_SCROLLWIN_LINEDOWN) {
ScrollToLine(first_line + 1);
} else if (type == wxEVT_SCROLLWIN_PAGEUP) {
ScrollToLine(first_line > visible_lines_t ? first_line - visible_lines_t : 0);
} else if (type == wxEVT_SCROLLWIN_PAGEDOWN) {
ScrollToLine(first_line + visible_lines_t);
} else {
ScrollToLine(ev.GetPosition());
}
}
void TreeList::UpdateScrollbar() {
// how many lines fit on the screen?
int h = GetClientSize().y - header_height;
visible_lines = (h + item_height - 1) / item_height;
visible_lines_t = h / item_height;
// set the scrollbar parameters to reflect this
SetScrollbar(wxVERTICAL, (int)first_line, (int)visible_lines_t, (int)total_lines);
}
void TreeList::RefreshLine(size_t line) {
if (line < first_line || line >= first_line + visible_lines) return;
// calculate the rect occupied by this line on screen
wxRect rect;
rect.x = 0;
rect.y = header_height + (int)(line - first_line) * item_height;
rect.width = GetClientSize().x;
rect.height = item_height;
// do refresh it
RefreshRect(rect, false);
}
void TreeList::onScroll(wxScrollWinEvent& ev) {
wxEventType type = ev.GetEventType();
if (type == wxEVT_SCROLLWIN_TOP) {
ScrollToLine(0);
} else if (type == wxEVT_SCROLLWIN_BOTTOM) {
ScrollToLine(total_lines);
} else if (type == wxEVT_SCROLLWIN_LINEUP) {
ScrollToLine(first_line > 0 ? first_line - 1 : 0);
} else if (type == wxEVT_SCROLLWIN_LINEDOWN) {
ScrollToLine(first_line + 1);
} else if (type == wxEVT_SCROLLWIN_PAGEUP) {
ScrollToLine(first_line > visible_lines_t ? first_line - visible_lines_t : 0);
} else if (type == wxEVT_SCROLLWIN_PAGEDOWN) {
ScrollToLine(first_line + visible_lines_t);
} else {
ScrollToLine(ev.GetPosition());
}
}
void TreeList::onSize(wxSizeEvent& ev) {
UpdateScrollbar();
Refresh(false);