00001
00002
00003
00004
00005
00006
00007
00008
00012 #ifndef ZYPP_UI_SELECTABLEIMPL_H
00013 #define ZYPP_UI_SELECTABLEIMPL_H
00014
00015 #include <iosfwd>
00016
00017 #include "zypp/base/PtrTypes.h"
00018
00019 #include "zypp/ui/Selectable.h"
00020 #include "zypp/ui/SelectableTraits.h"
00021
00023 namespace zypp
00024 {
00025
00026 namespace ui
00027 {
00028
00030
00031
00032
00037 struct Selectable::Impl
00038 {
00039 friend std::ostream & operator<<( std::ostream & str, const Selectable::Impl & obj );
00040
00041 public:
00042
00043 typedef SelectableTraits::AvialableItemSet AvialableItemSet;
00044 typedef SelectableTraits::availableItem_iterator availableItem_iterator;
00045 typedef SelectableTraits::availableItem_const_iterator availableItem_const_iterator;
00046 typedef SelectableTraits::availableItem_size_type availableItem_size_type;
00047
00048 public:
00049 Impl( const ResObject::Kind & kind_r,
00050 const std::string & name_r,
00051 const PoolItem & installedItem_r,
00052 availableItem_const_iterator availableBegin_r,
00053 availableItem_const_iterator availableEnd_r )
00054 : _kind( kind_r )
00055 , _name( name_r )
00056 , _installedItem( installedItem_r )
00057 , _availableItems( availableBegin_r, availableEnd_r )
00058 {
00059 setCandidate( NULL );
00060 }
00061
00062 public:
00064 ResObject::Kind kind() const
00065 { return _kind; }
00066
00068 const std::string & name() const
00069 { return _name; }
00070
00072 Status status() const;
00073
00075 bool set_status( const Status state_r );
00076
00078 PoolItem installedObj() const
00079 { return _installedItem; }
00080
00085 PoolItem candidateObj() const
00086 {
00087 return _candidate;
00088 }
00089
00094 PoolItem setCandidate( ResObject::constPtr byUser_r );
00095
00097 PoolItem theObj() const
00098 {
00099 PoolItem ret( candidateObj() );
00100 return( ret ? ret : _installedItem );
00101 }
00102
00104 availableItem_size_type availableObjs() const
00105 { return _availableItems.size(); }
00106
00108 availableItem_const_iterator availableBegin() const
00109 { return _availableItems.begin(); }
00110
00112 availableItem_const_iterator availableEnd() const
00113 { return _availableItems.end(); }
00114
00116 ResStatus::TransactByValue modifiedBy() const;
00117
00119 bool hasLicenceConfirmed() const
00120 { return candidateObj() && candidateObj().status().isLicenceConfirmed(); }
00121
00123 void setLicenceConfirmed( bool val_r )
00124 { if ( candidateObj() ) candidateObj().status().setLicenceConfirmed( val_r ); }
00125
00126 private:
00127 ResObject::Kind _kind;
00128 std::string _name;
00129 PoolItem _installedItem;
00130 AvialableItemSet _availableItems;
00131 PoolItem _candidate;
00132 };
00134
00136 inline std::ostream & operator<<( std::ostream & str, const Selectable::Impl & obj )
00137 {
00138 return str << '[' << obj.kind() << ']' << obj.name() << ": " << obj.status()
00139 << " (I " << obj._installedItem << ")"
00140 << " (A " << obj._availableItems.size() << ")"
00141 << obj._candidate;
00142 }
00143
00145 }
00148 }
00150 #endif // ZYPP_UI_SELECTABLEIMPL_H