Changeset View
Changeset View
Standalone View
Standalone View
src/DetailsWidget.cpp
Show First 20 Lines • Show All 49 Lines • ▼ Show 20 Line(s) | 43 | { | |||
---|---|---|---|---|---|
50 | m_detailsTabs.append(new DependsTab(this)); | 50 | m_detailsTabs.append(new DependsTab(this)); | ||
51 | m_detailsTabs.append(new InstalledFilesTab(0)); | 51 | m_detailsTabs.append(new InstalledFilesTab(0)); | ||
52 | m_detailsTabs.append(new VersionTab(0)); | 52 | m_detailsTabs.append(new VersionTab(0)); | ||
53 | m_detailsTabs.append(new ChangelogTab(this)); | 53 | m_detailsTabs.append(new ChangelogTab(this)); | ||
54 | 54 | | |||
55 | // Hide until a package is clicked | 55 | // Hide until a package is clicked | ||
56 | hide(); | 56 | hide(); | ||
57 | 57 | | |||
58 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | ||||
sitter: could use c++11 ranged based for loop here I guess? | |||||
59 | addTab(tab, tab->name()); | ||||
60 | } | ||||
61 | | ||||
58 | connect(mainTab, SIGNAL(setInstall(QApt::Package*)), | 62 | connect(mainTab, SIGNAL(setInstall(QApt::Package*)), | ||
59 | this, SIGNAL(setInstall(QApt::Package*))); | 63 | this, SIGNAL(setInstall(QApt::Package*))); | ||
60 | connect(mainTab, SIGNAL(setRemove(QApt::Package*)), | 64 | connect(mainTab, SIGNAL(setRemove(QApt::Package*)), | ||
61 | this, SIGNAL(setRemove(QApt::Package*))); | 65 | this, SIGNAL(setRemove(QApt::Package*))); | ||
62 | connect(mainTab, SIGNAL(setUpgrade(QApt::Package*)), | 66 | connect(mainTab, SIGNAL(setUpgrade(QApt::Package*)), | ||
63 | this, SIGNAL(setUpgrade(QApt::Package*))); | 67 | this, SIGNAL(setUpgrade(QApt::Package*))); | ||
64 | connect(mainTab, SIGNAL(setReInstall(QApt::Package*)), | 68 | connect(mainTab, SIGNAL(setReInstall(QApt::Package*)), | ||
65 | this, SIGNAL(setReInstall(QApt::Package*))); | 69 | this, SIGNAL(setReInstall(QApt::Package*))); | ||
66 | connect(mainTab, SIGNAL(setKeep(QApt::Package*)), | 70 | connect(mainTab, SIGNAL(setKeep(QApt::Package*)), | ||
67 | this, SIGNAL(setKeep(QApt::Package*))); | 71 | this, SIGNAL(setKeep(QApt::Package*))); | ||
68 | connect(mainTab, SIGNAL(setPurge(QApt::Package*)), | 72 | connect(mainTab, SIGNAL(setPurge(QApt::Package*)), | ||
69 | this, SIGNAL(setPurge(QApt::Package*))); | 73 | this, SIGNAL(setPurge(QApt::Package*))); | ||
70 | connect(this, SIGNAL(emitHideButtonsSignal()), | 74 | connect(this, SIGNAL(emitHideButtonsSignal()), | ||
71 | mainTab, SLOT(hideButtons())); | 75 | mainTab, SLOT(hideButtons())); | ||
76 | connect(this, &DetailsWidget::currentChanged, | ||||
77 | this, &DetailsWidget::refreshCurrentTab); | ||||
72 | } | 78 | } | ||
73 | 79 | | |||
74 | DetailsWidget::~DetailsWidget() | 80 | DetailsWidget::~DetailsWidget() | ||
75 | { | 81 | { | ||
76 | } | 82 | } | ||
77 | 83 | | |||
78 | void DetailsWidget::setBackend(QApt::Backend *backend) | 84 | void DetailsWidget::setBackend(QApt::Backend *backend) | ||
79 | { | 85 | { | ||
80 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | 86 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | ||
81 | tab->setBackend(backend); | 87 | tab->setBackend(backend); | ||
82 | } | 88 | } | ||
83 | } | 89 | } | ||
84 | 90 | | |||
85 | void DetailsWidget::setPackage(QApt::Package *package) | 91 | void DetailsWidget::setPackage(QApt::Package *package) | ||
86 | { | 92 | { | ||
93 | bool tabChanged = false; | ||||
87 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | 94 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | ||
88 | tab->setPackage(package); | 95 | tab->setPackage(package); | ||
89 | 96 | | |||
90 | if (tab->shouldShow()) { | 97 | if (currentIndex() == indexOf(tab) && !tab->shouldShow()) { | ||
91 | addTab(tab, tab->name()); | | |||
92 | } else { | | |||
93 | if (currentIndex() == indexOf(tab)) { | | |||
94 | setCurrentIndex(0); | 98 | setCurrentIndex(0); | ||
99 | tabChanged = true; | ||||
95 | } | 100 | } | ||
96 | removeTab(indexOf(tab)); | 101 | setTabEnabled(indexOf(tab), tab->shouldShow()); | ||
97 | } | 102 | } | ||
103 | if (!tabChanged) { | ||||
104 | refreshCurrentTab(); | ||||
98 | } | 105 | } | ||
99 | 106 | | |||
100 | show(); | 107 | show(); | ||
101 | } | 108 | } | ||
102 | 109 | | |||
103 | void DetailsWidget::emitHideButtons() | 110 | void DetailsWidget::emitHideButtons() | ||
104 | { | 111 | { | ||
105 | emit emitHideButtonsSignal(); | 112 | emit emitHideButtonsSignal(); | ||
106 | } | 113 | } | ||
107 | 114 | | |||
108 | void DetailsWidget::refreshTabs() | 115 | void DetailsWidget::refreshCurrentTab() | ||
109 | { | 116 | { | ||
110 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | 117 | DetailsTab *tab = qobject_cast<DetailsTab *>(currentWidget()); | ||
118 | if (tab) { | ||||
111 | tab->refresh(); | 119 | tab->refresh(); | ||
112 | } | 120 | } | ||
113 | } | 121 | } | ||
qobject_cast is marginally slower than static_cast but 100% safer when dealing with qobjects. sitter: qobject_cast is marginally slower than static_cast but 100% safer when dealing with qobjects. | |||||
114 | 122 | | |||
115 | void DetailsWidget::clear() | 123 | void DetailsWidget::clear() | ||
116 | { | 124 | { | ||
117 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | 125 | Q_FOREACH (DetailsTab *tab, m_detailsTabs) { | ||
118 | tab->clear(); | 126 | tab->clear(); | ||
119 | } | 127 | } | ||
120 | 128 | | |||
121 | hide(); | 129 | hide(); | ||
122 | } | 130 | } | ||
123 | 131 | | |||
124 | #include "DetailsWidget.moc" | 132 | #include "DetailsWidget.moc" |
could use c++11 ranged based for loop here I guess?