Refactoring FMenuBar::drawItems
This commit is contained in:
parent
ef5970b09c
commit
ff1fe44132
|
@ -2,6 +2,7 @@ exclude:
|
||||||
- /fonts/newfont.h
|
- /fonts/newfont.h
|
||||||
- /fonts/vgafont.h
|
- /fonts/vgafont.h
|
||||||
- /fonts/unicodemap.h
|
- /fonts/unicodemap.h
|
||||||
|
- /build.sh
|
||||||
- /ltmain.sh
|
- /ltmain.sh
|
||||||
component_depth: 3
|
component_depth: 3
|
||||||
languages:
|
languages:
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
2017-12-21 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Refactoring FMenuBar::drawItems
|
||||||
|
|
||||||
2017-12-19 Markus Gans <guru.mail@muenster.de>
|
2017-12-19 Markus Gans <guru.mail@muenster.de>
|
||||||
* Refactoring FMenu::drawItems
|
* Refactoring FMenu::drawItems
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,39 @@
|
||||||
|
|
||||||
#include <final/final.h>
|
#include <final/final.h>
|
||||||
|
|
||||||
|
// function prototype
|
||||||
|
void init();
|
||||||
|
void inputStreamExample();
|
||||||
|
void outputStreamExample();
|
||||||
|
void streamingIntoFStringExample();
|
||||||
|
void streamingFromFStringExample();
|
||||||
|
void CStringOutputExample();
|
||||||
|
void copyIntoFString();
|
||||||
|
void utf8StringOutputExample();
|
||||||
|
void letterCaseExample();
|
||||||
|
void stringConcatenationExample();
|
||||||
|
void stringCompareExample();
|
||||||
|
void stringSplittingExample();
|
||||||
|
void fromatStringExample();
|
||||||
|
void convertToNumberExample();
|
||||||
|
void convertNumberToStringExample();
|
||||||
|
void formatedNumberExample();
|
||||||
|
void trimExample();
|
||||||
|
void substringExample();
|
||||||
|
void insertExample();
|
||||||
|
void indexExample();
|
||||||
|
void iteratorExample();
|
||||||
|
void overwriteExample();
|
||||||
|
void removeExample();
|
||||||
|
void substringIncludeExample();
|
||||||
|
void replaceExample();
|
||||||
|
void tabToSpaceExample();
|
||||||
|
void backspaceControlCharacterExample();
|
||||||
|
void deleteControlCharacterExample();
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
std::cout << "----------------[ terminal ]-------------------"
|
std::cout << "----------------[ terminal ]-------------------"
|
||||||
|
|
|
@ -34,7 +34,10 @@ static FVTerm* terminal;
|
||||||
void tcapBooleans (const std::string&, bool);
|
void tcapBooleans (const std::string&, bool);
|
||||||
void tcapNumeric (const std::string&, int);
|
void tcapNumeric (const std::string&, int);
|
||||||
void tcapString (const std::string&, const char*);
|
void tcapString (const std::string&, const char*);
|
||||||
|
void debug (FApplication&);
|
||||||
|
void booleans();
|
||||||
|
void numeric();
|
||||||
|
void string(FTermcap::tcap_map*&);
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// functions
|
// functions
|
||||||
|
@ -77,7 +80,7 @@ void tcapString (const std::string& name, const char* cap_str)
|
||||||
if ( c > 127 )
|
if ( c > 127 )
|
||||||
{
|
{
|
||||||
std::ostringstream o;
|
std::ostringstream o;
|
||||||
o << std::oct << int(uChar(c));
|
o << std::oct << int(c);
|
||||||
sequence += "\\";
|
sequence += "\\";
|
||||||
sequence += o.str();
|
sequence += o.str();
|
||||||
}
|
}
|
||||||
|
@ -88,11 +91,11 @@ void tcapString (const std::string& name, const char* cap_str)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sequence += '^';
|
sequence += '^';
|
||||||
sequence += c + 64;
|
sequence += char(c + 64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sequence += c;
|
sequence += char(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << sequence << " ";
|
std::cout << sequence << " ";
|
||||||
|
|
|
@ -196,7 +196,7 @@ class FMenu : public FWindow, public FMenuList
|
||||||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||||
void draw();
|
void draw();
|
||||||
void drawItems();
|
void drawItems();
|
||||||
void drawSeparator(int);
|
void drawSeparator (int);
|
||||||
void drawMenuLine (FMenuItem*, int);
|
void drawMenuLine (FMenuItem*, int);
|
||||||
void drawCheckMarkPrefix (FMenuItem*);
|
void drawCheckMarkPrefix (FMenuItem*);
|
||||||
void drawMenuText (menuText&);
|
void drawMenuText (menuText&);
|
||||||
|
|
|
@ -99,6 +99,16 @@ class FMenuBar : public FWindow, public FMenuList
|
||||||
void cb_item_deactivated (FWidget*, data_ptr);
|
void cb_item_deactivated (FWidget*, data_ptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// Typedef
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
wchar_t* text;
|
||||||
|
int length;
|
||||||
|
int startpos;
|
||||||
|
int hotkeypos;
|
||||||
|
bool no_underline;
|
||||||
|
} menuText;
|
||||||
|
|
||||||
// Disable copy constructor
|
// Disable copy constructor
|
||||||
FMenuBar (const FMenuBar&);
|
FMenuBar (const FMenuBar&);
|
||||||
|
|
||||||
|
@ -117,6 +127,12 @@ class FMenuBar : public FWindow, public FMenuList
|
||||||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||||
void draw();
|
void draw();
|
||||||
void drawItems();
|
void drawItems();
|
||||||
|
void drawItem (FMenuItem*, int&);
|
||||||
|
void setLineAttributes (FMenuItem*);
|
||||||
|
void drawMenuText (menuText&);
|
||||||
|
void drawEllipsis (menuText&, int);
|
||||||
|
void drawLeadingSpace (int&);
|
||||||
|
void drawTrailingSpace (int&);
|
||||||
void adjustItems();
|
void adjustItems();
|
||||||
void leaveMenuBar();
|
void leaveMenuBar();
|
||||||
|
|
||||||
|
@ -127,6 +143,7 @@ class FMenuBar : public FWindow, public FMenuList
|
||||||
// Data Members
|
// Data Members
|
||||||
bool mouse_down;
|
bool mouse_down;
|
||||||
bool drop_down;
|
bool drop_down;
|
||||||
|
int screenWidth;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
|
|
@ -1301,26 +1301,27 @@ void FDialog::drawTitleBar()
|
||||||
for (x = 1; x <= i; x++)
|
for (x = 1; x <= i; x++)
|
||||||
print (' ');
|
print (' ');
|
||||||
|
|
||||||
// the title bar text
|
// Print title bar text
|
||||||
if ( tb_text )
|
if ( tb_text )
|
||||||
{
|
{
|
||||||
if ( length <= getWidth() - menu_btn - zoom_btn )
|
if ( length <= getWidth() - menu_btn - zoom_btn )
|
||||||
print (tb_text);
|
print (tb_text);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
print (tb_text.left(getWidth() - menu_btn - zoom_btn - 2));
|
print (tb_text.left(getWidth() - menu_btn - zoom_btn - 2));
|
||||||
print ("..");
|
print ("..");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill the rest of the bar
|
// Fill the rest of the bar
|
||||||
for ( ; x + 1 + length < getWidth() - zoom_btn - 1; x++)
|
for ( ; x + 1 + length < getWidth() - zoom_btn - 1; x++)
|
||||||
print (' ');
|
print (' ');
|
||||||
|
|
||||||
if ( getMaxColor() < 16 )
|
if ( getMaxColor() < 16 )
|
||||||
unsetBold();
|
unsetBold();
|
||||||
|
|
||||||
// draw the zoom/unzoom button
|
// Draw the zoom/unzoom button
|
||||||
if ( isResizeable() )
|
if ( isResizeable() )
|
||||||
{
|
{
|
||||||
if ( zoom_button_pressed )
|
if ( zoom_button_pressed )
|
||||||
|
@ -1379,7 +1380,7 @@ void FDialog::drawTitleBar()
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(false);
|
setReverse(false);
|
||||||
|
|
||||||
/* print the number of window in stack */
|
/* Print the number of window in stack */
|
||||||
//setPrintPos (getWidth() - 2, 1);
|
//setPrintPos (getWidth() - 2, 1);
|
||||||
//printf ("(%d)", getWindowLayer(this));
|
//printf ("(%d)", getWindowLayer(this));
|
||||||
}
|
}
|
||||||
|
|
|
@ -542,14 +542,16 @@ void FLabel::printLine ( wchar_t line[]
|
||||||
|
|
||||||
if ( length > uInt(getWidth()) )
|
if ( length > uInt(getWidth()) )
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
setColor (ellipsis_color, getBackgroundColor());
|
setColor (ellipsis_color, getBackgroundColor());
|
||||||
print ("..");
|
print ("..");
|
||||||
setColor();
|
setColor();
|
||||||
}
|
}
|
||||||
else if ( align_offset + to_char < getWidth() )
|
else if ( align_offset + to_char < getWidth() )
|
||||||
{
|
{
|
||||||
|
// Print trailing spaces
|
||||||
int len = getWidth() - align_offset - to_char;
|
int len = getWidth() - align_offset - to_char;
|
||||||
print (FString(len, ' ')); // trailing spaces
|
print (FString(len, ' '));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( hasReverseMode() )
|
if ( hasReverseMode() )
|
||||||
|
|
|
@ -1186,6 +1186,7 @@ void FListBox::drawLabel()
|
||||||
print (txt);
|
print (txt);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
print (text.left(uInt(getClientWidth() - 2)));
|
print (text.left(uInt(getClientWidth() - 2)));
|
||||||
setColor (wc.label_ellipsis_fg, wc.label_bg);
|
setColor (wc.label_ellipsis_fg, wc.label_bg);
|
||||||
print("..");
|
print("..");
|
||||||
|
|
|
@ -1439,6 +1439,7 @@ void FListView::drawColumnLabels()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
headerline << ' ';
|
headerline << ' ';
|
||||||
headerline << text.left(uInt(width - ellipsis_length));
|
headerline << text.left(uInt(width - ellipsis_length));
|
||||||
setColor (wc.label_ellipsis_fg, wc.label_bg);
|
setColor (wc.label_ellipsis_fg, wc.label_bg);
|
||||||
|
|
|
@ -1296,7 +1296,7 @@ bool FMenu::hotkeyMenu (FKeyEvent*& ev)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
int FMenu::getHotkeyPos (wchar_t src[], wchar_t dest[], uInt length)
|
int FMenu::getHotkeyPos (wchar_t src[], wchar_t dest[], uInt length)
|
||||||
{
|
{
|
||||||
// find hotkey position in string
|
// Find hotkey position in string
|
||||||
// + generate a new string without the '&'-sign
|
// + generate a new string without the '&'-sign
|
||||||
int hotkeypos = -1;
|
int hotkeypos = -1;
|
||||||
wchar_t* txt = src;
|
wchar_t* txt = src;
|
||||||
|
@ -1319,7 +1319,7 @@ int FMenu::getHotkeyPos (wchar_t src[], wchar_t dest[], uInt length)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMenu::draw()
|
void FMenu::draw()
|
||||||
{
|
{
|
||||||
// fill the background
|
// Fill the background
|
||||||
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
||||||
|
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
|
@ -1345,7 +1345,7 @@ void FMenu::drawItems()
|
||||||
while ( iter != last )
|
while ( iter != last )
|
||||||
{
|
{
|
||||||
if ( (*iter)->isSeparator() )
|
if ( (*iter)->isSeparator() )
|
||||||
drawSeparator(y);
|
drawSeparator (y);
|
||||||
else
|
else
|
||||||
drawMenuLine (*iter, y);
|
drawMenuLine (*iter, y);
|
||||||
|
|
||||||
|
@ -1355,7 +1355,7 @@ void FMenu::drawItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FMenu::drawSeparator(int y)
|
inline void FMenu::drawSeparator (int y)
|
||||||
{
|
{
|
||||||
setPrintPos (1, 2 + y);
|
setPrintPos (1, 2 + y);
|
||||||
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
||||||
|
|
196
src/fmenubar.cpp
196
src/fmenubar.cpp
|
@ -37,6 +37,7 @@ FMenuBar::FMenuBar(FWidget* parent)
|
||||||
: FWindow(parent)
|
: FWindow(parent)
|
||||||
, mouse_down(false)
|
, mouse_down(false)
|
||||||
, drop_down(false)
|
, drop_down(false)
|
||||||
|
, screenWidth(80)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,6 @@ FMenuBar::~FMenuBar() // destructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMenuBar::hide()
|
void FMenuBar::hide()
|
||||||
{
|
{
|
||||||
int screenWidth;
|
|
||||||
short fg, bg;
|
short fg, bg;
|
||||||
char* blank;
|
char* blank;
|
||||||
|
|
||||||
|
@ -776,9 +776,7 @@ void FMenuBar::draw()
|
||||||
void FMenuBar::drawItems()
|
void FMenuBar::drawItems()
|
||||||
{
|
{
|
||||||
std::vector<FMenuItem*>::const_iterator iter, last;
|
std::vector<FMenuItem*>::const_iterator iter, last;
|
||||||
int screenWidth;
|
|
||||||
int x = 1;
|
int x = 1;
|
||||||
screenWidth = getColumnNumber();
|
|
||||||
|
|
||||||
if ( item_list.empty() )
|
if ( item_list.empty() )
|
||||||
return;
|
return;
|
||||||
|
@ -788,27 +786,92 @@ void FMenuBar::drawItems()
|
||||||
if ( isMonochron() )
|
if ( isMonochron() )
|
||||||
setReverse(true);
|
setReverse(true);
|
||||||
|
|
||||||
|
screenWidth = getColumnNumber();
|
||||||
iter = item_list.begin();
|
iter = item_list.begin();
|
||||||
last = item_list.end();
|
last = item_list.end();
|
||||||
|
|
||||||
while ( iter != last )
|
while ( iter != last )
|
||||||
{
|
{
|
||||||
wchar_t* item_text;
|
drawItem (*iter, x);
|
||||||
FString txt;
|
++iter;
|
||||||
uInt txt_length;
|
}
|
||||||
int hotkeypos
|
|
||||||
, startpos
|
|
||||||
, to_char;
|
|
||||||
bool is_active
|
|
||||||
, is_selected
|
|
||||||
, is_noUnderline;
|
|
||||||
|
|
||||||
startpos = x + 1;
|
// Print spaces to end of line
|
||||||
is_active = (*iter)->isEnabled();
|
for (; x <= screenWidth; x++)
|
||||||
is_selected = (*iter)->isSelected();
|
print (' ');
|
||||||
is_noUnderline = (((*iter)->getFlags() & fc::no_underline) != 0);
|
|
||||||
|
|
||||||
if ( is_active )
|
if ( isMonochron() )
|
||||||
|
setReverse(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FMenuBar::drawItem (FMenuItem* menuitem, int& x)
|
||||||
|
{
|
||||||
|
FString txt = menuitem->getText();
|
||||||
|
menuText txtdata;
|
||||||
|
uInt txt_length = txt.getLength();
|
||||||
|
int hotkeypos;
|
||||||
|
int to_char;
|
||||||
|
bool is_enabled = menuitem->isEnabled();
|
||||||
|
bool is_selected = menuitem->isSelected();
|
||||||
|
|
||||||
|
txtdata.startpos = x + 1;
|
||||||
|
txtdata.no_underline = ((menuitem->getFlags() & fc::no_underline) != 0);
|
||||||
|
|
||||||
|
// Set screen attributes
|
||||||
|
setLineAttributes (menuitem);
|
||||||
|
drawLeadingSpace (x);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
txtdata.text = new wchar_t[txt_length + 1]();
|
||||||
|
}
|
||||||
|
catch (const std::bad_alloc& ex)
|
||||||
|
{
|
||||||
|
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( x - 1 <= screenWidth )
|
||||||
|
to_char = int(txt_length);
|
||||||
|
else
|
||||||
|
to_char = int(txt_length) - (screenWidth - x - 1);
|
||||||
|
|
||||||
|
hotkeypos = getHotkeyPos (txt.wc_str(), txtdata.text, txt_length);
|
||||||
|
|
||||||
|
if ( hotkeypos != -1 )
|
||||||
|
{
|
||||||
|
txt_length--;
|
||||||
|
to_char--;
|
||||||
|
}
|
||||||
|
|
||||||
|
txtdata.length = to_char;
|
||||||
|
x += int(txt_length);
|
||||||
|
|
||||||
|
if ( ! is_enabled || is_selected )
|
||||||
|
txtdata.hotkeypos = -1;
|
||||||
|
else
|
||||||
|
txtdata.hotkeypos = hotkeypos;
|
||||||
|
|
||||||
|
drawMenuText (txtdata);
|
||||||
|
drawEllipsis (txtdata, x);
|
||||||
|
drawTrailingSpace (x);
|
||||||
|
|
||||||
|
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
||||||
|
|
||||||
|
if ( isMonochron() && is_enabled && is_selected )
|
||||||
|
setReverse(true);
|
||||||
|
|
||||||
|
delete[] txtdata.text;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FMenuBar::setLineAttributes (FMenuItem* menuitem)
|
||||||
|
{
|
||||||
|
bool is_enabled = menuitem->isEnabled();
|
||||||
|
bool is_selected = menuitem->isSelected();
|
||||||
|
|
||||||
|
if ( is_enabled )
|
||||||
{
|
{
|
||||||
if ( is_selected )
|
if ( is_selected )
|
||||||
{
|
{
|
||||||
|
@ -831,108 +894,89 @@ void FMenuBar::drawItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
setColor();
|
setColor();
|
||||||
|
}
|
||||||
|
|
||||||
if ( x < screenWidth )
|
//----------------------------------------------------------------------
|
||||||
|
void FMenuBar::drawMenuText (menuText& data)
|
||||||
|
{
|
||||||
|
// Print menu text
|
||||||
|
|
||||||
|
for (int z = 0; z < data.length; z++)
|
||||||
{
|
{
|
||||||
x++;
|
if ( data.startpos > screenWidth - z )
|
||||||
print (' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
txt = (*iter)->getText();
|
|
||||||
txt_length = uInt(txt.getLength());
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
item_text = new wchar_t[txt_length + 1]();
|
|
||||||
}
|
|
||||||
catch (const std::bad_alloc& ex)
|
|
||||||
{
|
|
||||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( x - 1 <= screenWidth )
|
|
||||||
to_char = int(txt_length);
|
|
||||||
else
|
|
||||||
to_char = int(txt_length) - (screenWidth - x - 1);
|
|
||||||
|
|
||||||
hotkeypos = getHotkeyPos (txt.wc_str(), item_text, txt_length);
|
|
||||||
|
|
||||||
if ( hotkeypos != -1 )
|
|
||||||
{
|
|
||||||
txt_length--;
|
|
||||||
to_char--;
|
|
||||||
}
|
|
||||||
|
|
||||||
x += int(txt_length);
|
|
||||||
|
|
||||||
for (int z = 0; z < to_char; z++)
|
|
||||||
{
|
|
||||||
if ( startpos > screenWidth - z )
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ( ! std::iswprint(wint_t(item_text[z])) )
|
if ( ! std::iswprint(wint_t(data.text[z])) )
|
||||||
{
|
{
|
||||||
if ( ! isNewFont()
|
if ( ! isNewFont()
|
||||||
&& ( int(item_text[z]) < fc::NF_rev_left_arrow2
|
&& ( int(data.text[z]) < fc::NF_rev_left_arrow2
|
||||||
|| int(item_text[z]) > fc::NF_check_mark ) )
|
|| int(data.text[z]) > fc::NF_check_mark ) )
|
||||||
{
|
{
|
||||||
item_text[z] = L' ';
|
data.text[z] = L' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (z == hotkeypos) && is_active && ! is_selected )
|
if ( z == data.hotkeypos )
|
||||||
{
|
{
|
||||||
setColor (wc.menu_hotkey_fg, wc.menu_hotkey_bg);
|
setColor (wc.menu_hotkey_fg, wc.menu_hotkey_bg);
|
||||||
|
|
||||||
if ( ! is_noUnderline )
|
if ( ! data.no_underline )
|
||||||
setUnderline();
|
setUnderline();
|
||||||
|
|
||||||
print (item_text[z]);
|
print (data.text[z]);
|
||||||
|
|
||||||
if ( ! is_noUnderline )
|
if ( ! data.no_underline )
|
||||||
unsetUnderline();
|
unsetUnderline();
|
||||||
|
|
||||||
setColor();
|
setColor();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
print (item_text[z]);
|
print (data.text[z]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline void FMenuBar::drawEllipsis (menuText& txtdata, int x)
|
||||||
|
{
|
||||||
if ( x > screenWidth + 1 )
|
if ( x > screenWidth + 1 )
|
||||||
{
|
{
|
||||||
if ( startpos < screenWidth )
|
if ( txtdata.startpos < screenWidth )
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
setPrintPos (screenWidth - 1, 1);
|
setPrintPos (screenWidth - 1, 1);
|
||||||
print ("..");
|
print ("..");
|
||||||
}
|
}
|
||||||
else if ( startpos - 1 <= screenWidth )
|
else if ( txtdata.startpos - 1 <= screenWidth )
|
||||||
{
|
{
|
||||||
|
// Hide first character from text
|
||||||
setPrintPos (screenWidth, 1);
|
setPrintPos (screenWidth, 1);
|
||||||
print (' ');
|
print (' ');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline void FMenuBar::drawLeadingSpace (int& x)
|
||||||
|
{
|
||||||
|
// Print a leading blank space
|
||||||
|
|
||||||
if ( x < screenWidth )
|
if ( x < screenWidth )
|
||||||
{
|
{
|
||||||
x++;
|
x++;
|
||||||
print (' ');
|
print (' ');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setColor (wc.menu_active_fg, wc.menu_active_bg);
|
//----------------------------------------------------------------------
|
||||||
|
inline void FMenuBar::drawTrailingSpace (int& x)
|
||||||
|
{
|
||||||
|
// Print a trailing blank space
|
||||||
|
|
||||||
if ( isMonochron() && is_active && is_selected )
|
if ( x < screenWidth )
|
||||||
setReverse(true);
|
{
|
||||||
|
x++;
|
||||||
delete[] item_text;
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; x <= screenWidth; x++)
|
|
||||||
print (' ');
|
print (' ');
|
||||||
|
}
|
||||||
if ( isMonochron() )
|
|
||||||
setReverse(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -281,6 +281,7 @@ void FStatusBar::drawMessage()
|
||||||
print (getMessage());
|
print (getMessage());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
print ( getMessage().left(uInt(msg_length + termWidth - x - 1)) );
|
print ( getMessage().left(uInt(msg_length + termWidth - x - 1)) );
|
||||||
print ("..");
|
print ("..");
|
||||||
}
|
}
|
||||||
|
@ -629,6 +630,7 @@ void FStatusBar::drawKeys()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
print ( (*iter)->getText()
|
print ( (*iter)->getText()
|
||||||
.left(uInt(txt_length + screenWidth - x - 1)) );
|
.left(uInt(txt_length + screenWidth - x - 1)) );
|
||||||
print ("..");
|
print ("..");
|
||||||
|
@ -657,6 +659,7 @@ void FStatusBar::drawKeys()
|
||||||
print ((*iter)->getText());
|
print ((*iter)->getText());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Print ellipsis
|
||||||
print ( (*iter)->getText()
|
print ( (*iter)->getText()
|
||||||
.left(uInt(txt_length + screenWidth - x - 1)) );
|
.left(uInt(txt_length + screenWidth - x - 1)) );
|
||||||
print ("..");
|
print ("..");
|
||||||
|
|
Loading…
Reference in New Issue