Mercurial > hg > easyhg
comparison selectablelabel.cpp @ 69:6d5a5571caec
* Basic working "Open Repository" dialog
author | Chris Cannam |
---|---|
date | Thu, 18 Nov 2010 15:14:39 +0000 |
parents | |
children | 121cb1032717 |
comparison
equal
deleted
inserted
replaced
68:b918e57c7bea | 69:6d5a5571caec |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 /* | |
4 EasyMercurial | |
5 | |
6 Based on HgExplorer by Jari Korhonen | |
7 Copyright (c) 2010 Jari Korhonen | |
8 Copyright (c) 2010 Chris Cannam | |
9 Copyright (c) 2010 Queen Mary, University of London | |
10 | |
11 This program is free software; you can redistribute it and/or | |
12 modify it under the terms of the GNU General Public License as | |
13 published by the Free Software Foundation; either version 2 of the | |
14 License, or (at your option) any later version. See the file | |
15 COPYING included with this distribution for more information. | |
16 */ | |
17 | |
18 #include "selectablelabel.h" | |
19 | |
20 #include "debug.h" | |
21 | |
22 #include <iostream> | |
23 #include <QApplication> | |
24 | |
25 SelectableLabel::SelectableLabel(QWidget *p) : | |
26 QLabel(p), | |
27 m_selected(false) | |
28 { | |
29 setTextFormat(Qt::RichText); | |
30 // setLineWidth(2); | |
31 // setFixedWidth(480); | |
32 setupStyle(); | |
33 setOpenExternalLinks(true); | |
34 } | |
35 | |
36 SelectableLabel::~SelectableLabel() | |
37 { | |
38 } | |
39 | |
40 void | |
41 SelectableLabel::setUnselectedText(QString text) | |
42 { | |
43 if (m_unselectedText == text) return; | |
44 m_unselectedText = text; | |
45 if (!m_selected) { | |
46 setText(m_unselectedText); | |
47 resize(sizeHint()); | |
48 } | |
49 } | |
50 | |
51 void | |
52 SelectableLabel::setSelectedText(QString text) | |
53 { | |
54 if (m_selectedText == text) return; | |
55 m_selectedText = text; | |
56 if (m_selected) { | |
57 setText(m_selectedText); | |
58 resize(sizeHint()); | |
59 } | |
60 } | |
61 | |
62 void | |
63 SelectableLabel::setupStyle() | |
64 { | |
65 QPalette palette = QApplication::palette(); | |
66 | |
67 setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | | |
68 Qt::LinksAccessibleByMouse | | |
69 Qt::TextSelectableByMouse); | |
70 | |
71 if (m_selected) { | |
72 setStyleSheet | |
73 (QString("QLabel:hover { background: %1; color: %3; } " | |
74 "QLabel:!hover { background: %2; color: %3 } " | |
75 "QLabel { padding: 7px }") | |
76 .arg(palette.highlight().color().name()) | |
77 .arg(palette.highlight().color().name()) | |
78 .arg(palette.text().color().name())); | |
79 } else { | |
80 setStyleSheet | |
81 (QString("QLabel:hover { background: %1; color: %3; } " | |
82 "QLabel:!hover { background: %2; color: %3 } " | |
83 "QLabel { padding: 7px }") | |
84 .arg(palette.button().color().name()) | |
85 .arg(palette.light().color().name()) | |
86 .arg(palette.text().color().name())); | |
87 } | |
88 } | |
89 | |
90 void | |
91 SelectableLabel::setSelected(bool s) | |
92 { | |
93 if (m_selected == s) return; | |
94 m_selected = s; | |
95 if (m_selected) { | |
96 setText(m_selectedText); | |
97 } else { | |
98 setText(m_unselectedText); | |
99 } | |
100 setupStyle(); | |
101 parentWidget()->resize(parentWidget()->sizeHint()); | |
102 } | |
103 | |
104 void | |
105 SelectableLabel::toggle() | |
106 { | |
107 setSelected(!m_selected); | |
108 } | |
109 | |
110 void | |
111 SelectableLabel::mousePressEvent(QMouseEvent *e) | |
112 { | |
113 m_swallowRelease = !m_selected; | |
114 setSelected(true); | |
115 QLabel::mousePressEvent(e); | |
116 emit selectionChanged(); | |
117 } | |
118 | |
119 void | |
120 SelectableLabel::mouseDoubleClickEvent(QMouseEvent *e) | |
121 { | |
122 QLabel::mouseDoubleClickEvent(e); | |
123 emit doubleClicked(); | |
124 } | |
125 | |
126 void | |
127 SelectableLabel::mouseReleaseEvent(QMouseEvent *e) | |
128 { | |
129 if (!m_swallowRelease) QLabel::mouseReleaseEvent(e); | |
130 m_swallowRelease = false; | |
131 } | |
132 | |
133 void | |
134 SelectableLabel::enterEvent(QEvent *) | |
135 { | |
136 // std::cerr << "enterEvent" << std::endl; | |
137 // QPalette palette = QApplication::palette(); | |
138 // palette.setColor(QPalette::Window, Qt::gray); | |
139 // setStyleSheet("background: gray"); | |
140 // setPalette(palette); | |
141 } | |
142 | |
143 void | |
144 SelectableLabel::leaveEvent(QEvent *) | |
145 { | |
146 // std::cerr << "leaveEvent" << std::endl; | |
147 // setStyleSheet("background: white"); | |
148 // QPalette palette = QApplication::palette(); | |
149 // palette.setColor(QPalette::Window, Qt::gray); | |
150 // setPalette(palette); | |
151 } |