]> icculus.org git repositories - duncan/yast2-qt4.git/blob - src/pkg/YQPkgLangList.cc
2f3f03dbd7a9215d0c2b7bfe7290d758cc2008e7
[duncan/yast2-qt4.git] / src / pkg / YQPkgLangList.cc
1 /*---------------------------------------------------------------------\
2 |                                                                      |
3 |                      __   __    ____ _____ ____                      |
4 |                      \ \ / /_ _/ ___|_   _|___ \                     |
5 |                       \ V / _` \___ \ | |   __) |                    |
6 |                        | | (_| |___) || |  / __/                     |
7 |                        |_|\__,_|____/ |_| |_____|                    |
8 |                                                                      |
9 |                               core system                            |
10 |                                                        (C) SuSE GmbH |
11 \----------------------------------------------------------------------/
12
13   File:       YQPkgLangList.cc
14
15   Author:     Stefan Hundhammer <sh@suse.de>
16
17   Textdomain "packages-qt"
18
19 /-*/
20
21
22 #define y2log_component "qt-pkg"
23 #include <ycp/y2log.h>
24 #include <qregexp.h>
25
26 #include "YQi18n.h"
27 #include "utf8.h"
28 #include "YQPkgLangList.h"
29
30 using std::set;
31
32
33 YQPkgLangList::YQPkgLangList( QWidget * parent )
34     : YQPkgObjList( parent )
35 {
36     y2debug( "Creating language list" );
37
38     int numCol = 0;
39     QStringList headers;
40     headers <<  "";     _statusCol      = numCol++;
41
42     // Translators: Table column heading for language ISO code like "de_DE", "en_US"
43     // Please keep this short to avoid stretching the column too wide!
44     headers <<  _( "Code"       );      _nameCol        = numCol++;
45
46     // Full (human readable) language / country name like "German (Austria)"
47     headers <<  _( "Language"); _summaryCol     = numCol++;
48     setAllColumnsShowFocus( true );
49     setHeaderLabels(headers);
50
51     connect( this,      SIGNAL( currentItemChanged        ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
52              this,      SLOT  ( filter()                                    ) );
53
54     fillList();
55     selectSomething();
56
57     y2debug( "Creating language list done" );
58 }
59
60
61 YQPkgLangList::~YQPkgLangList()
62 {
63     // NOP
64 }
65
66
67 void
68 YQPkgLangList::fillList()
69 {
70     clear();
71     y2debug( "Filling language list" );
72
73
74     for ( ZyppPoolIterator it = zyppLangBegin();
75           it != zyppLangEnd();
76           ++it )
77     {
78         ZyppLang zyppLang = tryCastToZyppLang( (*it)->theObj() );
79
80         if ( zyppLang )
81             addLangItem( *it, zyppLang );
82         else
83             y2error( "Found non-Language selectable" );
84     }
85
86     y2debug( "Language list filled" );
87 }
88
89
90 void
91 YQPkgLangList::filterIfVisible()
92 {
93     if ( isVisible() )
94         filter();
95 }
96
97
98 void
99 YQPkgLangList::filter()
100 {
101     emit filterStart();
102
103     if ( selection() )
104     {
105         ZyppLang lang = selection()->zyppLang();
106
107         if ( lang )
108         {
109             string currentLang = lang->name();
110
111             //
112             // Iterate over all selectables in pool
113             //
114
115             for ( ZyppPoolIterator it = zyppPkgBegin();
116                   it != zyppPkgEnd();
117                   ++it )
118             {
119                 ZyppObj zyppObj = (*it)->theObj();
120
121                 if ( zyppObj )
122                 {
123                     //
124                     // Iterate over all "freshens" dependencies of this object
125                     //
126
127                     zypp::CapSet freshens = zyppObj->dep( zypp::Dep::FRESHENS );
128
129                     for ( zypp::CapSet::const_iterator cap_it = freshens.begin();
130                           cap_it != freshens.end();
131                           ++cap_it )
132                     {
133                         if ( (*cap_it).index() == currentLang ) // obj freshens this language
134                         {
135                             ZyppPkg pkg = tryCastToZyppPkg( zyppObj );
136
137                             if ( pkg )
138                             {
139                                 y2debug( "Found pkg %s for lang %s",
140                                          pkg->name().c_str(), currentLang.c_str() );
141
142                                 emit filterMatch( *it, pkg );
143                             }
144                             else
145                             {
146                                 y2warning( "Found non-pkg obj %s for lang %s",
147                                            pkg->name().c_str(), currentLang.c_str() );
148                             }
149                         }
150                     }
151                 }
152             }
153         }
154     }
155
156     emit filterFinished();
157 }
158
159
160 void
161 YQPkgLangList::addLangItem( ZyppSel     selectable,
162                             ZyppLang    zyppLang )
163 {
164     if ( ! selectable )
165     {
166         y2error( "NULL ZyppSel!" );
167         return;
168     }
169
170     new YQPkgLangListItem( this, selectable, zyppLang );
171 }
172
173
174 YQPkgLangListItem *
175 YQPkgLangList::selection() const
176 {
177 #if FIXME
178     Q3ListViewItem * item = selectedItem();
179
180     if ( ! item )
181         return 0;
182
183     return dynamic_cast<YQPkgLangListItem *> (item);
184 #else
185     return 0;
186 #endif
187 }
188
189
190
191
192
193
194 YQPkgLangListItem::YQPkgLangListItem( YQPkgLangList *   langList,
195                                       ZyppSel           selectable,
196                                       ZyppLang          lang            )
197     : YQPkgObjListItem( langList, selectable, lang )
198     , _langList( langList )
199     , _zyppLang( lang )
200 {
201 }
202
203
204
205 YQPkgLangListItem::~YQPkgLangListItem()
206 {
207     // NOP
208 }
209
210
211 void
212 YQPkgLangListItem::applyChanges()
213 {
214     solveResolvableCollections();
215 }
216
217
218
219
220 #include "YQPkgLangList.moc"