25 #define YUILogComponent "ncurses"
26 #include <yui/YUILog.h>
27 #include <yui/YDialog.h>
30 #include "NCDumbTab.h"
31 #include "NCPopupList.h"
34 NCDumbTab::NCDumbTab( YWidget * parent )
39 framedim.Pos =
wpos( 1 );
40 framedim.Sze =
wsze( 2 );
44 NCDumbTab::~NCDumbTab()
46 yuiDebug() << std::endl;
50 int NCDumbTab::preferredWidth()
52 defsze.W = hasChildren() ? firstChild()->preferredWidth() : 0;
54 YItemIterator listIt = itemsBegin();
56 unsigned int tabBarWidth = 0;
59 while ( listIt != itemsEnd() )
61 tabLabel =
NClabel( (*listIt)->label() );
62 tabBarWidth += tabLabel.width() + 1;
67 if ( tabBarWidth > (
unsigned )defsze.W )
68 defsze.W = tabBarWidth;
70 defsze.W += framedim.Sze.W;
72 if ( defsze.W > NCurses::cols() )
73 defsze.W = NCurses::cols();
79 int NCDumbTab::preferredHeight()
81 defsze.H = hasChildren() ? firstChild()->preferredHeight() : 0;
82 defsze.H += framedim.Sze.H;
90 yuiDebug() <<
"Set enabled" << std::endl;
92 YDumbTab::setEnabled( do_bv );
96 void NCDumbTab::setSize(
int newwidth,
int newheight )
98 wsze csze( newheight, newwidth );
99 wRelocate(
wpos( 0 ), csze );
100 csze = wsze::max( 0, csze - framedim.Sze );
103 firstChild()->setSize( csze.W, csze.H );
113 if ( currentIndex > 0 &&
114 currentIndex <= (
unsigned)itemsCount() -1 )
119 ret = createMenuEvent( currentIndex );
124 if ( currentIndex < (
unsigned)itemsCount()-1 &&
130 ret = createMenuEvent( currentIndex );
135 setCurrentTab( hotKey );
138 ret = createMenuEvent( currentIndex );
146 void NCDumbTab::setCurrentTab( wint_t key )
149 YItemIterator listIt = itemsBegin();
153 while ( listIt != itemsEnd() )
155 tablabel =
NCstring( (*listIt)->label() );
156 tablabel.stripHotkey();
157 yuiDebug() <<
"HOTkey: " << tablabel.hotkey() <<
" key: " << key << std::endl;
158 if ( tolower ( tablabel.hotkey() ) == tolower ( key ) )
168 NCursesEvent NCDumbTab::createMenuEvent(
unsigned int index )
173 item = itemAt( index );
176 yuiMilestone() <<
"Show tab: " << item->label() << std::endl;
177 ret.selection = (YMenuItem *)item;
183 void NCDumbTab::addItem( YItem * item )
185 YDumbTab::addItem( item );
188 yuiDebug() <<
"Add item: " << item->label() << std::endl;
190 if ( item->selected() )
191 currentIndex = item->index();
194 void NCDumbTab::selectItem( YItem * item,
bool selected )
198 currentIndex = item->index();
199 yuiDebug() <<
"Select item: " << item->index() << std::endl;
202 YDumbTab::selectItem( item, selected );
207 void NCDumbTab::shortcutChanged()
215 void NCDumbTab::wRedraw()
221 win->
bkgd( style.plain );
224 YItemIterator listIt = itemsBegin();
226 int winWidth = win->
width() - 2;
227 unsigned int labelPos = 1;
229 bool nonActive =
false;
232 while ( listIt != itemsEnd() )
234 tablabel =
NCstring( (*listIt)->label() );
235 tablabel.stripHotkey();
236 hotlabel = &tablabel;
238 nonActive = (i == currentIndex)?
false:
true;
240 if ( GetState() == NC::WSactive )
243 tablabel.drawAt( *win,
247 NC::TOPLEFT,
false );
253 tablabel.drawAt( *win,
258 NC::TOPLEFT,
false );
262 tablabel.drawAt( *win,
266 NC::TOPLEFT,
false );
270 labelPos += tablabel.width() + 2;
275 if ( listIt != itemsEnd() )
277 winWidth -= tablabel.width() -1;
288 redrawChild( firstChild() );
292 bool NCDumbTab::HasHotkey(
int key )
296 YItemIterator listIt = itemsBegin();
299 while ( listIt != itemsEnd() )
301 tablabel =
NCstring( (*listIt)->label() );
302 tablabel.stripHotkey();
303 if ( tablabel.hasHotkey() && tolower ( tablabel.hotkey() ) == tolower ( key ) )
305 hotKey = tolower ( key ) ;
311 yuiDebug() <<
"Has hot key: " << key <<
" " << (ret?
"yes":
"no") << std::endl;
316 void NCDumbTab::redrawChild( YWidget *widget )
320 if ( widget->hasChildren() )
322 YWidgetListConstIterator widgetIt = widget->childrenBegin();
323 while ( widgetIt != widget->childrenEnd() )
325 child =
dynamic_cast<NCWidget *
>(*widgetIt);
328 redrawChild( *widgetIt );
int bkgd(const chtype ch)
virtual void setEnabled(bool do_bv)