File: SMessageLabel.cpp

package info (click to toggle)
yudit 3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 18,472 kB
  • sloc: cpp: 76,344; perl: 5,630; makefile: 989; ansic: 823; sh: 441
file content (123 lines) | stat: -rw-r--r-- 3,784 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/** 
 *  Yudit Unicode Editor Source File
 *
 *  GNU Copyright (C) 1997-2023  Gaspar Sinai <gaspar@yudit.org>  
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License, version 2,
 *  dated June 1991. See file COPYYING for details.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "gui/SMessageLabel.h"
#include "swidget/SIconFactory.h"
#include "stoolkit/SUtil.h"

SMessageLabel::SMessageLabel (const SProperties props)
{
  xmanagerCludge = true;
  SString font = props["yudit.default.font"];
  SString fontSizeString=props["yudit.default.fontsize"];

  double fontSize=0;
  fontSizeString.append ((char)0);
  sscanf (fontSizeString.array(), "%lf", &fontSize);
  if (fontSize < 2.0) fontSize = 2.0;
  SColor fg = SColor(props["yudit.label.foreground"]);
  SColor tfg = SColor(props["yudit.title.foreground"]);

  SLabel* l;
  l = new SLabel ("",  SIconFactory::getIcon("Inform"));
  l->setFont(font, fontSize);
  l->setForeground (tfg);
  SDimension dh = l->getPreferredSize();
  l->move (SLocation (0, 0));
  l->resize (dh);
  messageTitleLabel = l;

  l = new SLabel ("");
  l->setFont(font, fontSize);
  l->move (SLocation ((int)dh.width, 0));
  l->resize (dh);

  messageLabel = l;
  add (messageTitleLabel);
  add (messageLabel);

  currentMessageType = SS_NONE;
  preferredSize = SDimension (dh.width + 100, dh.height); 
}

SMessageLabel::~SMessageLabel ()
{
}

/**
 * This routine was introduced to make this
 * usable on peecees with windows.
 * Seems like XManager has some bug that they don't
 * fix. On unix you could in fact get rid of this whole  method.
 * The presiously set size got lost. I don't really know why XManager is so
 * popular....
 */
void 
SMessageLabel::resize(const SDimension& d)
{
  SPanel::resize (d);
  /* we only need to do it once. */
  if (!xmanagerCludge)
  {
    return;
  }
  xmanagerCludge = false;
  SDimension dh = messageTitleLabel->getPreferredSize();
  messageTitleLabel->move (SLocation (0, 0));
  messageTitleLabel->resize (dh);

  messageLabel->move (SLocation ((int)dh.width, 0));
  messageLabel->resize (SDimension (d.width, dh.height));
  messageTitleLabel->setIcon (0);
}

void
SMessageLabel::setMessage (const SString& msg, SMessageType info)
{
  messageLabel->setText (msg);
  messageLabel->resize (messageLabel->getPreferredSize());

  if (info==currentMessageType) return;
  currentMessageType = info;
  switch (info)
  {
  case SS_ERR:
    messageTitleLabel->setIcon (SIconFactory::getIcon("Error"));
    //messageTitleLabel->setBackground (SColor("Black"));
    //messageTitleLabel->setLabelBackground (SColor("Red"));
    messageTitleLabel->setForeground (SColor("White"));
    break;
  case SS_WARN:
    messageTitleLabel->setIcon (SIconFactory::getIcon("Caution"));
    //messageTitleLabel->setBackground (SColor("Black"));
    //messageTitleLabel->setLabelBackground (SColor("Yellow"));
    messageTitleLabel->setForeground (SColor("Black"));
    break;
  case SS_INFO:
    messageTitleLabel->setIcon (SIconFactory::getIcon("Inform"));
    messageTitleLabel->setBackground (background);
    messageTitleLabel->setForeground (SColor("Black"));
    break;
  default:
    messageTitleLabel->setBackground (background);
    messageTitleLabel->setForeground (SColor("Black"));
    messageTitleLabel->setIcon (0);
    break;
  }
}