wxSize&
size,
longstyle,
constwxString& name)
86: wxPanel(parent, id, pos,
size, style, name)
124SetBackgroundStyle(wxBG_STYLE_CUSTOM);
126SetAutoLayout(
true);
178 if(ar_size[
i] >= 0)
179sizes.push_back(ar_size[
i]);
200widths.push_back(ar_w[
i]);
208heights.push_back(ar_h[
i]);
222col_n =
max(1, col_n);
223row_n =
max(1, row_n);
225 for(
int i= 0;
i< col_n;
i++)
226widths.push_back(10);
227 for(
int i= 0;
i< row_n;
i++)
228heights.push_back(10);
246 intn_w = (
int) widths.size();
247 intn_h = (
int) heights.size();
257 for(
int i= 0;
i< n_w - 1;
i++) {
263 m_SplitSize.x = widths.empty() ? pos : pos + widths.back();
266 for(
int i= 0;
i< n_h - 1;
i++) {
272 m_SplitSize.y = heights.empty() ? pos : pos + heights.back();
299 size_tn_w = widths.size();
304 for(
size_t i= 0;
i< n_w - 1;
i++) {
346 size_tn_h = heights.size();
351 for(
size_t i= 0;
i< n_h - 1;
i++) {
377 if(w && i_cell >= 0) {
390 ERR_POST(
"CSplitter::InsertToCell() - cell index is out of range");
429TCells::iterator it = std::find(
m_Cells.begin(),
m_Cells.end(), child);
440wxWindow* w = child, *p = 0;
453 if(index >= 0 && index < (
int)
m_Cells.size()) {
456wxWindow* w_focus = FindFocus();
457 boolkeep_focus = (w == w_focus) ||
s_Contains(w, w_focus);
461TParent::RemoveChild(w);
465wxWindow* new_focus =
NULL;
466 for(
int i= index - 1;
i>= 0;
i--) {
473 for(
size_t i= index + 1;
i<
m_Cells.size();
i++) {
493 for(
size_t i= 0;
i<
m_Cells.size();
i++ ) {
497TParent::RemoveChild(w);
523wxPaintDC dc(
this);
525wxBrush brush(GetBackgroundColour());
530 for(
inti_x = 0; i_x < n_cols; i_x++ ) {
534 for(
inti_y = 0; i_y < n_rows; i_y++ ) {
539dc.SetPen(*wxTRANSPARENT_PEN);
541dc.DrawRectangle(left, top, right - left + 1, bottom - top + 1);
544 if(i_y != n_rows - 1) {
548 if(i_x != n_cols - 1) {
552 if(i_y != n_rows - 1 && i_x != n_cols - 1) {
562wxColour cl_back = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
563wxColour cl_line = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
566wxBrush brush(cl_back);
570dc.DrawRectangle(x, y, w, h);
572 #ifdef __WXMAC__THIS_CODE_NEEDS_TO_BE_CHANGED_EVERYTIME_OSX_UPGRADED 574 intyy = GetClientSize().y - y + h + 2;
575HIRect rect = CGRectMake(x, yy, w, h);
577HIThemeSplitterDrawInfo
info;
578 info.state = kThemeStateActive;
579 info.adornment = kThemeAdornmentNone;
581WindowRef wr = WindowRef(this->MacGetTopLevelWindowRef());
583QDBeginCGContext (GetWindowPort(wr), &
context);
584HIThemeDrawPaneSplitter(&rect, &
info,
context, kHIThemeOrientationInverted);
585QDEndCGContext(GetWindowPort(wr), &
context);
593wxSize new_size = GetSize();
598 boolsplit_changed = x_changed || y_changed;
603 x_Resize(old_size, new_size, split_changed | size_changed);
617 returnTParent::Show(show);
637 if(b_size_changed) {
693 returni_cell % n_cols;
701 returni_cell / n_cols;
707 for(
size_t i=0 ;
i<
m_Cells.size();
i++ ) {
769wxWindowList& children = GetChildren();
771vector<wxWindow*> v_children;
772 for( wxWindowList::iterator it = children.begin(); it != children.end(); ++it) {
773wxWindow* child = *it;
774v_children.push_back(child);
776 for(
size_t i= 0;
i< v_children.size();
i++ ) {
777wxWindow* child = v_children[
i];
778TParent::RemoveChild(child);
804wxWindow* w =
GetCell(i_x, i_y);
814w->SetSize(left, top, width, height);
845 boolb_hit_x_sep = (i_sep_x != -1);
846 boolb_hit_y_sep = (i_sep_y != -1);
848 if(b_hit_x_sep || b_hit_y_sep) {
849 if(event.LeftDClick()) {
862 if(event.Dragging()) {
873cursor = (i_sep_y == -1) ? wxCURSOR_ARROW : wxCURSOR_SIZENS;
875cursor = (i_sep_y == -1) ? wxCURSOR_SIZEWE : wxCURSOR_SIZING ;
898SetCursor(wxCURSOR_ARROW);
905 if(event.GetKeyCode() == WXK_ESCAPE) {
921 _ASSERT(start_i >=0 && end_i < (
int) v.size());
923 for(
int i= start_i;
i<= end_i;
i++ ) {
971wxSize
size= GetSize();
1032SetCursor(wxCURSOR_ARROW);
1060 int n= (
int) vpos.size();
1061 for(
int i= 0;
i<
n;
i++ ) {
1062 intpos = vpos[
i];
1073i_sep = i_cell = -1;
1074 int n= (
int) vpos.size();
1075 for(
int i= 0;
i<
n;
i++ ) {
1076 intpos = vpos[
i];
1118 int n= (
int) vSplitPos.size() + 1;
1121 intrest = space - w *
n;
1123 intpos = w + (rest ? 1 : 0);
1125 for(
int i= 0;
i<
n- 1;
i++ ) {
1126vSplitPos[
i] = pos;
1136 return(index > -1 && index < (
int) v.size()) ? v[index] : 0;
1141 intindex,
int&
delta)
1143 intsz = sizes[index];
1144 if(norm_sizes[index] < 0) {
1145norm_sizes[index] = sz;
1147 intmin_sz = min_sizes[index];
1148 intnew_sz =
max(min_sz, sz +
delta);
1149sizes[index] = new_sz;
1150 delta+= (sz - new_sz);
1155 intindex,
int&
delta,
boolunlimited)
1157 intsz = sizes[index];
1158 intmax_sz = norm_sizes[index];
1162}
else if(max_sz > 0) {
1163new_sz =
min(sz +
delta, max_sz);
1165sizes[index] = new_sz;
1166 delta+= (sz - new_sz);
1174 intresizable_index)
1176 intcells_n = (
int)sizes.size();
1177 _ASSERT(cells_n == 0 || ((
int) norm_sizes.size() == cells_n
1178&& (
int)min_sizes.size() == cells_n));
1180 if(resizable_index == -1)
1181resizable_index = cells_n - 1;
1187 for(
int i= cells_n - 1;
i>= 0 &&
delta< 0;
i-- ) {
1188 if(
i!= resizable_index) {
1192}
else if(
delta> 0) {
1194 for(
int i= 0; i < cells_n && delta > 0;
i++ ) {
1195 if(
i!= resizable_index) {
1200sizes[resizable_index] +=
delta;
1213min_widths.resize(col_n, 0);
1214min_heights.clear();
1215min_heights.resize(row_n, 50);
1217 for(
size_tcol = 0; col < col_n; col++ ) {
1218 for(
size_t row= 0;
row< row_n;
row++ ) {
1232vector<bool>& min_rows)
const 1269 inti_sep,
int delta,
intresizable_index)
1271 intcells_n = (
int)sizes.size();
1272 if(resizable_index == -1)
1273resizable_index = i_sep;
1275 intdelta_2 = -
delta;
1276 if(i_sep < resizable_index) {
1279 for(
int i= i_sep;
i>= 0 &&
delta< 0;
i-- ) {
1283 for(
int i= cells_n-1;
i> i_sep && delta_2 > 0;
i-- ) {
1284 if(
i!= resizable_index) {
1289 x_GrowCell(sizes, norm_sizes, resizable_index, delta_2,
true);
1293 for(
int i= 0; i < i_sep && delta > 0;
i++ ) {
1301 x_ShrinkCell(sizes, min_sizes, norm_sizes, resizable_index, delta_2);
1304 for(
int i= i_sep + 1;
i< cells_n -1 && delta_2 < 0;
i++ ) {
1314 for(
int i= i_sep;
i>= 0 &&
delta< 0;
i-- ) {
1315 if(
i!= resizable_index) {
1320 for(
int i= cells_n-1;
i> i_sep && delta_2 > 0;
i-- ) {
1326 x_GrowCell(sizes, norm_sizes, i_sep + 1, delta_2,
true);
1328}
else if(
delta> 0) {
1330 for(
int i= 0; i <= i_sep && delta > 0;
i++ ) {
1331 if(
i!= resizable_index) {
1336sizes[resizable_index] +=
delta;
1339 for(
int i= i_sep + 1;
i< cells_n && delta_2 < 0;
i++ ) {
1349 boolupdate =
false;
1353 if( (i_x >= start_x && i_x <= stop_x) ||
1354(i_y >= start_y && i_y <= stop_y) ) {
1369 intn_split = (
int) split_positions.size();
1370 intsum_size = GetSize().y - n_split *
m_SepSize;
1371 intav_size = sum_size / (n_split + 1);
1374split_positions.push_back(
size);
1375v_norm_size.push_back(-1);
1379 doubleK = (double)(sum_size -
m_SepSize) / (sum_size + av_size);
1381 for(
int i= 0;
i< n_split;
i++ ) {
1382 intstart = (
i== 0) ? 0 : split_positions[
i- 1] +
m_SepSize;
1383 intsz = split_positions[
i] - start;
1384sizes[
i] = (
int)( K * sz);
1388 for(
intpos = 0,
i= 0;
i< n_split;
i++ ) {
1390split_positions[
i] = pos;
1400 size_tsplit_n = split_positions.size();
1402sizes.resize(split_n + 1);
1405 for(
size_t i= 0;
i< split_n;
i++ ) {
1418 size_tsplit_n = sizes.size() - 1;
1419split_positions.clear();
1420split_positions.resize(split_n);
1423 for(
size_t i= 0;
i< split_n;
i++ ) {
1424split_positions[
i] = prev_end + sizes[
i];
1425prev_end = split_positions[
i] +
m_SepSize;
CSplitter - container with resizable separators.
void OnLeftDown(wxMouseEvent &event)
void OnContextMenu(wxContextMenuEvent &event)
void SetResizableCell(int col, int row)
void OnKeyDown(wxKeyEvent &event)
void x_SizesToSplitPositions(const TPosVector &sizes, TPosVector &split_positions)
wxWindow * m_PrevFocus
members used for event handling
void x_DistributeEvenly(bool b_x, bool b_y)
virtual bool Show(bool show=true)
vector< int > TSizeVector
void x_SplitPositionsToSizes(const TPosVector &split_positions, int total_size, TPosVector &sizes) const
int x_GetBottom(int i_y) const
void OnLeftUp(wxMouseEvent &event)
void x_DoDistributeEvenly(TPosVector &vSplitPos, int size)
virtual void x_PreserveNormalSize(bool preserve)
bool FindChild(const wxWindow *child, int &col, int &row) const
bool IsValidCell(int col, int row) const
returns "true" if cell specified by (col, row) exists in the splitter
void OnPaint(wxPaintEvent &event)
virtual bool RemoveFromCell(int col, int row)
static void x_ShrinkCell(TPosVector &sizes, TPosVector &min_sizes, TPosVector &norm_sizes, int index, int &delta)
void x_DoResize(TPosVector &sizes, TSizeVector &norm_sizes, TPosVector &min_sizes, int size, int new_size, int resizable_index)
void OnMouseEnter(wxMouseEvent &event)
virtual void BlockLayout(bool block=true)
int x_GetLeft(int i_x) const
void x_CalculateMinSizes(TPosVector &min_widths, TPosVector &min_heights) const
int x_GetRight(int i_x) const
virtual void x_DoDragSeparator(wxMouseEvent &event, bool b_final)
virtual bool x_IsDragging() const
bool InsertToCell(wxWindow *child, int col, int row)
If cell [col, row] exists and vacant - adds widget to the container.
void GetWidths(TPosVector &widths) const
static void x_GrowCell(TPosVector &sizes, TPosVector &norm_sizes, int index, int &delta, bool unlimited=false)
void x_ResizeToCell(int i_cell)
void x_UpdateRegion(int start_x, int stop_x, int start_y, int stop_y)
virtual void x_DrawSeparator(wxDC &dc, int x, int y, int w, int h)
int x_GetRow(int i_cell) const
int x_GetTop(int i_y) const
void x_Split(ESplitType type, const TPosVector &widths, const TPosVector &heights)
void x_GetMinimized(vector< bool > &min_cols, vector< bool > &min_rows) const
int x_GetHeight(int i_y) const
int GetSeparatorSize() const
int x_GetWidth(int i_x) const
void x_HitTest(int z, TPosVector &vpos, int &i_cell, int &i_sep)
void x_MoveSeparator(TPosVector &sizes, TSizeVector &norm_sizes, TPosVector &min_sizes, int i_sep, int delta, int resizable_index)
void GetHeights(TPosVector &heights) const
int x_HitTestSeparator(int z, TPosVector &vpos)
returns Separator index if hit or -1
int x_GetCellIndex(int i_x, int i_y) const
virtual void x_StartDrag(int i_sep_x, int i_sep_y)
void SetWidths(const TPosVector &widths)
void OnMouseLeave(wxMouseEvent &event)
virtual void x_Resize(const wxSize &old_size, const wxSize &new_size, bool b_size_changes)
void SetHeights(const TPosVector &heights)
ESplitType
ESplitMode - splitter orientation.
@ eHorizontal
vertical space is splitted
@ eGrid
horizontal space is splitted
virtual void Split(ESplitType type)
Creates a splitter with a single cell.
wxWindow * GetCell(int col, int row)
int x_GetColumn(int i_cell) const
bool x_RemoveChild(int index)
void OnMouseMove(wxMouseEvent &event)
ESplitType GetSplitType() const
void x_NewSplit(TPosVector &split_positions, TSizeVector &v_norm_size, int size)
virtual void RemoveChild(wxWindowBase *child)
overriding wxWindowBase function
int GetColumnsCount() const
Include a standard set of the NCBI C++ Toolkit most basic headers.
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
The NCBI C++/STL use hints.
Int4 delta(size_t dimension_, const Int4 *score_)
static sljit_uw total_size
static const int kMaxCells
static const int kDefSepSize
CSplitter.
int ElementsSum(vector< int > v, int start_i, int end_i)
int GetElemOrZero(CSplitter::TPosVector &v, int index)
static bool s_Contains(wxWindow *parent, wxWindow *child)
#define row(bind, expected)
static CS_CONTEXT * context
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4