summaryrefslogtreecommitdiff
path: root/wx+
diff options
context:
space:
mode:
Diffstat (limited to 'wx+')
-rw-r--r--wx+/file_drop.h8
-rw-r--r--wx+/grid.cpp52
-rw-r--r--wx+/grid.h9
-rw-r--r--wx+/image_resources.cpp5
-rw-r--r--wx+/tooltip.cpp2
5 files changed, 42 insertions, 34 deletions
diff --git a/wx+/file_drop.h b/wx+/file_drop.h
index 2feef6e2..c9f2469c 100644
--- a/wx+/file_drop.h
+++ b/wx+/file_drop.h
@@ -28,7 +28,7 @@ namespace zen
/*
1. setup a window to emit EVENT_DROP_FILE:
- - simple file system paths: setupFileDrop
+ - simple file system paths: setupFileDrop
- any shell paths with validation: setupShellItemDrop
2. register events:
@@ -64,14 +64,14 @@ const wxEventType EVENT_DROP_FILE = impl::createNewEventType();
class FileDropEvent : public wxCommandEvent
{
public:
- FileDropEvent(const std::vector<Zstring>& filesDropped) : wxCommandEvent(EVENT_DROP_FILE), filesDropped_(filesDropped) {}
+ FileDropEvent(const std::vector<Zstring>& droppedPaths) : wxCommandEvent(EVENT_DROP_FILE), droppedPaths_(droppedPaths) {}
- const std::vector<Zstring>& getFiles() const { return filesDropped_; }
+ const std::vector<Zstring>& getPaths() const { return droppedPaths_; }
private:
wxEvent* Clone() const override { return new FileDropEvent(*this); }
- const std::vector<Zstring> filesDropped_;
+ const std::vector<Zstring> droppedPaths_;
};
typedef void (wxEvtHandler::*FileDropEventFunction)(FileDropEvent&);
diff --git a/wx+/grid.cpp b/wx+/grid.cpp
index 7573fcb9..b24fabdc 100644
--- a/wx+/grid.cpp
+++ b/wx+/grid.cpp
@@ -40,7 +40,15 @@ const int GridData::COLUMN_GAP_LEFT = 4;
namespace
{
-//------------ Grid Constants --------------------------------
+//------------------------------ Grid Parameters --------------------------------
+wxColor getColorLabelText() { return wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); }
+
+wxColor getColorLabelGradientFrom () { return wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); }
+wxColor getColorLabelGradientTo () { return wxColour(200, 200, 200); } //light grey
+
+wxColor getColorLabelGradientFocusFrom() { return getColorLabelGradientFrom(); }
+wxColor getColorLabelGradientFocusTo () { return getColorSelectionGradientFrom(); }
+
const double MOUSE_DRAG_ACCELERATION = 1.5; //unit: [rows / (pixel * sec)] -> same value as Explorer!
const int DEFAULT_COL_LABEL_BORDER = 6; //top + bottom border in addition to label height
//const int COLUMN_LABEL_BORDER = GridData::COLUMN_GAP_LEFT;
@@ -50,12 +58,6 @@ const int ROW_LABEL_BORDER = 3;
const int COLUMN_RESIZE_TOLERANCE = 6; //unit [pixel]
const int COLUMN_FILL_GAP_TOLERANCE = 10; //enlarge column to fill full width when resizing
-const wxColor COLOR_LABEL_GRADIENT_FROM = *wxWHITE;
-const wxColor COLOR_LABEL_GRADIENT_TO = wxColour(200, 200, 200); //light grey
-
-const wxColor COLOR_LABEL_GRADIENT_FROM_FOCUS = COLOR_LABEL_GRADIENT_FROM;
-const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = getColorSelectionGradientFrom();
-
const wxColor colorGridLine = wxColour(192, 192, 192); //light grey
const bool fillGapAfterColumns = true; //draw rows/column label to fill full window width; may become an instance variable some time?
@@ -202,7 +204,7 @@ wxRect GridData::drawColumnLabelBorder(wxDC& dc, const wxRect& rect) //returns r
//draw border (with gradient)
{
wxDCPenChanger dummy(dc, wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID));
- dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH);
+ dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight()), getColorLabelGradientFrom(), dc.GetPen().GetColour(), wxSOUTH);
dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0));
}
@@ -213,15 +215,15 @@ wxRect GridData::drawColumnLabelBorder(wxDC& dc, const wxRect& rect) //returns r
void GridData::drawColumnLabelBackground(wxDC& dc, const wxRect& rect, bool highlighted)
{
if (highlighted)
- dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM_FOCUS, COLOR_LABEL_GRADIENT_TO_FOCUS, wxSOUTH);
+ dc.GradientFillLinear(rect, getColorLabelGradientFocusFrom(), getColorLabelGradientFocusTo(), wxSOUTH);
else //regular background gradient
- dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxSOUTH); //clear overlapping cells
+ dc.GradientFillLinear(rect, getColorLabelGradientFrom(), getColorLabelGradientTo(), wxSOUTH); //clear overlapping cells
}
void GridData::drawColumnLabelText(wxDC& dc, const wxRect& rect, const wxString& text)
{
- wxDCTextColourChanger dummy(dc, *wxBLACK); //accessibility: always set both foreground AND background colors!
+ wxDCTextColourChanger dummy(dc, getColorLabelText()); //accessibility: always set both foreground AND background colors!
drawTextLabelFitting(dc, text, rect, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
}
@@ -384,17 +386,17 @@ private:
{
const wxRect& clientRect = GetClientRect();
- dc.GradientFillLinear(clientRect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxSOUTH);
+ dc.GradientFillLinear(clientRect, getColorLabelGradientFrom(), getColorLabelGradientTo(), wxSOUTH);
dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID));
{
- wxDCPenChanger dummy(dc, COLOR_LABEL_GRADIENT_FROM);
+ wxDCPenChanger dummy(dc, getColorLabelGradientFrom());
dc.DrawLine(clientRect.GetTopLeft(), clientRect.GetTopRight());
}
- dc.GradientFillLinear(wxRect(clientRect.GetBottomLeft (), clientRect.GetTopLeft ()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH);
- dc.GradientFillLinear(wxRect(clientRect.GetBottomRight(), clientRect.GetTopRight()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH);
+ dc.GradientFillLinear(wxRect(clientRect.GetBottomLeft (), clientRect.GetTopLeft ()), getColorLabelGradientFrom(), dc.GetPen().GetColour(), wxSOUTH);
+ dc.GradientFillLinear(wxRect(clientRect.GetBottomRight(), clientRect.GetTopRight()), getColorLabelGradientFrom(), dc.GetPen().GetColour(), wxSOUTH);
dc.DrawLine(clientRect.GetBottomLeft(), clientRect.GetBottomRight());
@@ -470,12 +472,11 @@ private:
void render(wxDC& dc, const wxRect& rect) override
{
-
/*
IsEnabled() vs IsThisEnabled() since wxWidgets 2.9.5:
- void wxWindowBase::NotifyWindowOnEnableChange(), called from bool wxWindowBase::Enable(), has this buggy exception of NOT
- refreshing child elements when disabling a IsTopLevel() dialog, e.g. when showing a modal dialog.
+ void wxWindowBase::NotifyWindowOnEnableChange(), called from bool wxWindowBase::Enable(), fails to refresh
+ child elements when disabling a IsTopLevel() dialog, e.g. when showing a modal dialog.
The unfortunate effect on XP for using IsEnabled() when rendering the grid is that the user can move the modal dialog
and *draw* with it on the background while the grid refreshes as disabled incrementally!
@@ -513,8 +514,8 @@ private:
void drawRowLabel(wxDC& dc, const wxRect& rect, size_t row)
{
//clearArea(dc, rect, getColorRowLabel());
- dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxEAST); //clear overlapping cells
- wxDCTextColourChanger dummy3(dc, *wxBLACK); //accessibility: always set both foreground AND background colors!
+ dc.GradientFillLinear(rect, getColorLabelGradientFrom(), getColorLabelGradientTo(), wxEAST); //clear overlapping cells
+ wxDCTextColourChanger dummy3(dc, getColorLabelText()); //accessibility: always set both foreground AND background colors!
//label text
wxRect textRect = rect;
@@ -673,9 +674,9 @@ private:
if (activeMove && activeMove->isRealMove())
{
if (col + 1 == activeMove->refColumnTo()) //handle pos 1, 2, .. up to "at end" position
- dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight() + wxPoint(-2, 0)), COLOR_LABEL_GRADIENT_FROM, *wxBLUE, wxSOUTH);
+ dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight() + wxPoint(-2, 0)), getColorLabelGradientFrom(), *wxBLUE, wxSOUTH);
else if (col == activeMove->refColumnTo() && col == 0) //pos 0
- dc.GradientFillLinear(wxRect(rect.GetTopLeft(), rect.GetBottomLeft() + wxPoint(2, 0)), COLOR_LABEL_GRADIENT_FROM, *wxBLUE, wxSOUTH);
+ dc.GradientFillLinear(wxRect(rect.GetTopLeft(), rect.GetBottomLeft() + wxPoint(2, 0)), getColorLabelGradientFrom(), *wxBLUE, wxSOUTH);
}
}
}
@@ -2050,6 +2051,13 @@ void Grid::scrollTo(size_t row)
}
+ bool Grid::Enable(bool enable)
+ {
+ Refresh();
+ return wxScrolledWindow::Enable(enable);
+ }
+
+
size_t Grid::getGridCursor() const
{
return mainWin_->getCursor();
diff --git a/wx+/grid.h b/wx+/grid.h
index 76ee383a..8523b698 100644
--- a/wx+/grid.h
+++ b/wx+/grid.h
@@ -192,7 +192,8 @@ public:
void scrollTo(size_t row);
void Refresh(bool eraseBackground = true, const wxRect* rect = nullptr) override;
- bool Enable( bool enable = true) override { Refresh(); return wxScrolledWindow::Enable(enable); }
+ bool Enable(bool enable = true) override;
+
//############################################################################################################
private:
@@ -234,11 +235,11 @@ private:
std::vector<size_t> get() const
{
- std::vector<size_t> selection;
+ std::vector<size_t> result;
for (size_t row = 0; row < rowSelectionValue.size(); ++row)
if (rowSelectionValue[row] != 0)
- selection.push_back(row);
- return selection;
+ result.push_back(row);
+ return result;
}
void selectAll() { selectRange(0, rowSelectionValue.size(), true); }
diff --git a/wx+/image_resources.cpp b/wx+/image_resources.cpp
index 9d4f2396..7383f620 100644
--- a/wx+/image_resources.cpp
+++ b/wx+/image_resources.cpp
@@ -42,10 +42,9 @@ class GlobalResources
public:
static GlobalResources& instance()
{
-#if defined _MSC_VER && _MSC_VER > 1800
-#error remove warning
+#if defined _MSC_VER && _MSC_VER < 1900
+#error function scope static initialization is not yet thread-safe!
#endif
- //caveat: function scope static initialization is not thread-safe in VS 2010! => but we wouldn't use wxWidgets in combination with multithreading anyway!
static GlobalResources inst;
return inst;
}
diff --git a/wx+/tooltip.cpp b/wx+/tooltip.cpp
index 91298db4..ea9852d3 100644
--- a/wx+/tooltip.cpp
+++ b/wx+/tooltip.cpp
@@ -73,7 +73,7 @@ void Tooltip::show(const wxString& text, wxPoint mousePos, const wxBitmap* bmp)
}
tipWindow->GetSizer()->SetSizeHints(tipWindow); //~=Fit() + SetMinSize()
- //Linux: Fit() seems to be somewhat broken => this needs to be called EVERY time inside show, not only if text or bmp change
+ //Linux: Fit() seems to be broken => this needs to be called EVERY time inside show, not only if text or bmp change
const wxPoint newPos = wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft ?
mousePos - wxPoint(30 + tipWindow->GetSize().GetWidth(), 0) :
bgstack15