Expand or collapse a tree element with a double-click

This commit is contained in:
Markus Gans 2017-10-18 23:07:15 +02:00
parent 1cb6a5f73d
commit b11e37a921
3 changed files with 35 additions and 21 deletions

View File

@ -1,3 +1,7 @@
2017-10-18 Markus Gans <guru.mail@muenster.de>
* Expand or collapse a tree element with a double-click
* FListView::adjustViewport() improved
2017-10-15 Markus Gans <guru.mail@muenster.de> 2017-10-15 Markus Gans <guru.mail@muenster.de>
* FObject double free prevention of fc::empty_string * FObject double free prevention of fc::empty_string

View File

@ -1065,6 +1065,21 @@ void FListView::onMouseDoubleClick (FMouseEvent* ev)
if ( first_visible_line.getPosition() + mouse_y - 1 > int(getCount()) ) if ( first_visible_line.getPosition() + mouse_y - 1 > int(getCount()) )
return; return;
FListViewItem* item = getCurrentItem();
if ( item->isExpandable() )
{
if ( item->isExpand() )
item->collapse();
else
item->expand();
adjustSize();
if ( isVisible() )
draw();
}
processClick(); processClick();
} }
} }
@ -1231,29 +1246,22 @@ void FListView::onFocusOut (FFocusEvent*)
void FListView::adjustViewport() void FListView::adjustViewport()
{ {
int element_count = int(getCount()); int element_count = int(getCount());
int height = getClientHeight();
if ( element_count == 0 || getClientHeight() <= 0 ) if ( element_count == 0 || height <= 0 )
return; return;
if ( element_count < getClientHeight() ) if ( element_count < height )
{ {
first_visible_line = itemlist.begin(); first_visible_line = itemlist.begin();
last_visible_line = first_visible_line; last_visible_line = first_visible_line;
last_visible_line += element_count - 1; last_visible_line += element_count - 1;
} }
/* if ( first_visible_line.getPosition() > element_count - height )
if ( yoffset > element_count - getClientHeight() )
yoffset = element_count - getClientHeight();
if ( yoffset < 0 )
yoffset = 0;*/
//setTermXY(1,1); ::printf("(%d > %d)", first_visible_line.getPosition(),element_count - getClientHeight() - 1); fflush(stdout); sleep(1);
if ( first_visible_line.getPosition() > element_count - getClientHeight() )
{ {
int difference = first_visible_line.getPosition() - (element_count - getClientHeight()); int difference = first_visible_line.getPosition()
- (element_count - height);
if ( first_visible_line.getPosition() - difference + 1 > 0 ) if ( first_visible_line.getPosition() - difference + 1 > 0 )
{ {
@ -1262,15 +1270,17 @@ void FListView::adjustViewport()
} }
} }
/* int max_last_visible_line = first_visible_line.getPosition()
if ( current_iter.getPosition() < first_visible_line.getPosition() ) + height - 1;
current_iter = first_visible_line;
if ( first_visible_line.getPosition() < current_iter.getPosition() - getClientHeight() ) if ( last_visible_line.getPosition() > max_last_visible_line )
{ {
first_visible_line = current_iter; last_visible_line = first_visible_line;
first_visible_line -= getClientHeight(); last_visible_line += height - 1;
}*/ }
if ( current_iter.getPosition() > last_visible_line.getPosition() )
current_iter = last_visible_line;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -4060,7 +4060,7 @@ void FTerm::init()
setPalette (fc::DarkGray, 0x50, 0x50, 0x50); setPalette (fc::DarkGray, 0x50, 0x50, 0x50);
setPalette (fc::LightBlue, 0x80, 0xa4, 0xec); setPalette (fc::LightBlue, 0x80, 0xa4, 0xec);
setPalette (fc::LightGreen, 0x54, 0xff, 0x54); setPalette (fc::LightGreen, 0x54, 0xff, 0x54);
setPalette (fc::LightCyan, 0x49, 0xc9, 0xe3); setPalette (fc::LightCyan, 0x62, 0xbf, 0xf8);
setPalette (fc::LightRed, 0xff, 0x54, 0x54); setPalette (fc::LightRed, 0xff, 0x54, 0x54);
setPalette (fc::LightMagenta, 0xff, 0x54, 0xff); setPalette (fc::LightMagenta, 0xff, 0x54, 0xff);
setPalette (fc::Yellow, 0xff, 0xff, 0x54); setPalette (fc::Yellow, 0xff, 0xff, 0x54);