libyui-gtk  2.44.9
YGLabel.cc
1 /********************************************************************
2  * YaST2-GTK - http://en.opensuse.org/YaST2-GTK *
3  ********************************************************************/
4 
5 #define YUILogComponent "gtk"
6 #include "YGUI.h"
7 #include "YGUtils.h"
8 #include "YGWidget.h"
9 #include "YLabel.h"
10 
11 class YGLabel : public YLabel, public YGWidget
12 {
13 public:
14  YGLabel (YWidget *parent, const std::string &text, bool heading, bool outputField)
15  : YLabel (NULL, text, heading, outputField),
16  YGWidget (this, parent, GTK_TYPE_LABEL, NULL)
17  {
18  gtk_misc_set_alignment (GTK_MISC (getWidget()), 0.0, 0.5);
19  if (outputField) {
20  gtk_label_set_selectable (GTK_LABEL (getWidget()), TRUE);
21  gtk_label_set_single_line_mode (GTK_LABEL (getWidget()), TRUE);
22  YGUtils::setWidgetFont (getWidget(), PANGO_STYLE_ITALIC, PANGO_WEIGHT_NORMAL,
23  PANGO_SCALE_MEDIUM);
24  }
25  if (heading)
26  YGUtils::setWidgetFont (getWidget(), PANGO_STYLE_NORMAL, PANGO_WEIGHT_BOLD,
27  PANGO_SCALE_LARGE);
28  setLabel (text);
29  }
30 
31  virtual void setText (const std::string &label)
32  {
33  YLabel::setText (label);
34  gtk_label_set_label (GTK_LABEL (getWidget()), label.c_str());
35  std::string::size_type i = label.find ('\n', 0);
36  if (isOutputField()) { // must not have a breakline
37  if (i != std::string::npos) {
38  std::string l (label, 0, i);
39  gtk_label_set_label (GTK_LABEL (getWidget()), l.c_str());
40  }
41  }
42  else {
43  bool selectable = i != std::string::npos && i != label.size()-1;
44  gtk_label_set_selectable (GTK_LABEL (getWidget()), selectable);
45  }
46  }
47 
48  YGWIDGET_IMPL_COMMON (YLabel)
49  YGWIDGET_IMPL_USE_BOLD (YLabel)
50 };
51 
52 YLabel *YGWidgetFactory::createLabel (YWidget *parent,
53  const std::string &text, bool heading, bool outputField)
54 { return new YGLabel (parent, text, heading, outputField); }
55