41 #define YUILogComponent "ncurses-pkg"
46 #include "NCPkgTable.h"
48 #include "NCPopupInfo.h"
49 #include "NCPkgStrings.h"
51 #include "NCPkgPopupDiskspace.h"
52 #include "NCPackageSelector.h"
53 #include <zypp/ui/Selectable.h>
70 NCPkgTableTag::NCPkgTableTag( ZyppObj objPtr, ZyppSel selPtr,
74 , dataPointer( objPtr )
75 , selPointer( selPtr )
77 setLabel( statusToString(stat) );
80 std::string NCPkgTableTag::statusToString( ZyppStatus stat )
const
120 NCPkgTable::NCPkgTable( YWidget * parent, YTableHeader * tableHeader )
121 : NCTable( parent, tableHeader )
124 , tableType ( T_Packages )
125 , haveInstalledVersion ( false )
126 , visibleInfo( I_Technical )
128 yuiDebug() <<
"NCPkgTable created" << endl;
140 NCPkgTable::~NCPkgTable()
142 delete statusStrategy;
157 const std::vector<std::string> & elements,
161 YTableItem *tabItem =
new YTableItem();
164 tabItem->addCell(
new NCPkgTableTag( objPtr, slbPtr, stat ));
167 for (
unsigned i = 1; i < elements.size()+1; ++i ) {
168 tabItem->addCell( elements[i-1] );
172 addItem(tabItem,
true);
186 return NCTable::deleteAllItems();
200 return NCTable::cellChanged( index, colnum, newtext );
213 const ZyppSel & slbPtr,
218 if ( !packager || !slbPtr )
223 bool license_confirmed =
true;
224 ZyppPkg pkgPtr = NULL;
227 int cols = NCurses::cols();
228 int lines = NCurses::lines();
237 notify = objPtr->delnotify();
238 yuiMilestone() <<
"DELETE message: " << notify << endl;
239 header = NCPkgStrings::WarningLabel();
247 notify = objPtr->insnotify();
248 yuiMilestone() <<
"NOTIFY message: " << notify << endl;
249 header = NCPkgStrings::NotifyLabel();
257 license = objPtr->licenseToConfirm();
258 license_confirmed = slbPtr->hasLicenceConfirmed();
265 std::string pkgName = slbPtr->name();
267 if ( !license.empty() )
269 if ( !license_confirmed )
274 if ( !license_confirmed )
286 newstatus = S_Protected;
295 yuiMilestone() <<
"User confirmed license agreement for " << pkgName << endl;
296 slbPtr->setLicenceConfirmed (
true);
300 if ( ok && !notify.empty() )
302 std::string html_text = packager->InfoText()->createHtmlText( notify );
303 NCPopupInfo * info =
new NCPopupInfo( wpos( (lines * 35)/100, (cols * 25)/100),
305 "<i>" + pkgName +
"</i><br><br>" + html_text
307 info->setPreferredSize( (NCurses::cols() * 50)/100, (NCurses::lines() * 30)/100);
308 info->showInfoPopup( );
310 YDialog::deleteTopmostDialog();
316 if ( ok && singleChange )
351 if ( tableType == T_Availables )
372 unsigned int index = 0;
375 while ( index < size )
378 NCTableLine * cl = myPad()->ModifyLine( index );
386 YTableItem *it =
dynamic_cast<YTableItem*
> (cl->origItem() );
387 YTableCell *tcell = it->cell(0);
399 ZyppStatus newstatus = S_NoInst;
400 if ( slbPtr && objPtr)
402 if ( tableType == T_Availables )
404 std::string isCandidate =
" ";
405 if ( objPtr == slbPtr->candidateObj() )
408 cl->AddCol( 2,
new NCTableCol( isCandidate ) );
418 cc->setStatus( newstatus );
419 cellChanged( index, 0, cc->statusToString (newstatus) );
437 static bool slbHasInstalledObj (
const ZyppSel & slb)
439 return ! slb->installedEmpty ();
450 std::vector<std::string> header;
456 bool haveInstalledPkgs = find_if (zyppPkgBegin (), zyppPkgEnd (),
457 slbHasInstalledObj) != zyppPkgEnd ();
460 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
461 header.push_back(
"L" + NCPkgStrings::PkgName() );
462 header.push_back(
"L" + NCPkgStrings::PkgSummary() );
463 if ( haveInstalledPkgs > 0 )
465 header.push_back(
"L" + NCPkgStrings::PkgVersionNew() );
466 header.push_back(
"L" + NCPkgStrings::PkgVersionInst() );
467 haveInstalledVersion =
true;
471 header.push_back(
"L" + NCPkgStrings::PkgVersion() );
473 header.push_back(
"L" + NCPkgStrings::PkgSize() );
476 header.push_back(
"L" + NCPkgStrings::PkgSource() );
482 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
483 header.push_back(
"L" + NCPkgStrings::PkgName() );
484 header.push_back(
"L" + NCPkgStrings::PkgVersionNew() );
485 header.push_back(
"L" + NCPkgStrings::PkgVersionInst() );
486 header.push_back(
"L" + NCPkgStrings::PkgSummary() );
487 header.push_back(
"L" + NCPkgStrings::PkgSize() );
492 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
493 header.push_back(
"L" + NCPkgStrings::PkgName() );
494 header.push_back(
"L" + NCPkgStrings::PkgSummary() );
495 header.push_back(
"L" + NCPkgStrings::PatchKind() );
496 header.push_back(
"L" + NCPkgStrings::PkgVersion() );
502 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
503 header.push_back(
"L" + NCPkgStrings::PatternsLabel() );
508 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
509 header.push_back(
"L" + NCPkgStrings::LangCode() );
510 header.push_back(
"L" + NCPkgStrings::LangName() );
515 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
516 header.push_back(
"L" + NCPkgStrings::PkgName() );
517 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
518 header.push_back(
"L" + NCPkgStrings::PkgVersion() );
519 header.push_back(
"L" + NCPkgStrings::PkgInstSource() );
520 header.push_back(
"L" + NCPkgStrings::PkgSize() );
521 header.push_back(
"L" + NCPkgStrings::PkgArch() );
526 header.push_back(
"L" + NCPkgStrings::PkgStatus() );
527 header.push_back(
"L" + NCPkgStrings::PkgName() );
528 header.push_back(
"L" + NCPkgStrings::PkgSummary() );
542 std::vector<std::string> pkgLine;
545 if ( !pkgPtr || !slbPtr )
547 yuiError() <<
"No valid package available" << endl;
552 pkgLine.push_back( slbPtr->name() );
554 std::string instVersion =
"";
555 std::string version =
"";
562 if ( ! slbPtr->installedEmpty() )
564 instVersion = slbPtr->installedObj()->edition().asString();
567 if ( slbPtr->hasCandidateObj() )
569 version = slbPtr->candidateObj()->edition().asString();
573 version = pkgPtr->edition().asString();
575 pkgLine.push_back( version );
579 pkgLine.push_back( instVersion );
581 pkgLine.push_back( pkgPtr->summary() );
583 status = slbPtr->status();
584 yuiMilestone() <<
"Status of " << slbPtr->name() <<
": " << status << endl;
585 zypp::ByteCount size = pkgPtr->installSize();
586 pkgLine.push_back( size.asString( 8 ) );
591 std::string isCandidate =
" ";
592 if ( pkgPtr == slbPtr->candidateObj() )
594 pkgLine.push_back( isCandidate );
596 version = pkgPtr->edition().asString();
597 pkgLine.push_back( version );
600 pkgLine.push_back( pkgPtr->repository().info().alias() );
604 if ( ! slbPtr->installedEmpty() )
606 if ( pkgPtr->edition() == slbPtr->installedObj()->edition() &&
607 pkgPtr->arch() == slbPtr->installedObj()->arch() )
609 status = S_KeepInstalled;
613 zypp::ByteCount size = pkgPtr->installSize();
614 pkgLine.push_back( size.asString( 8 ) );
615 pkgLine.push_back( pkgPtr->arch().asString());
623 pkgLine.push_back( pkgPtr->summary() );
624 if ( ! slbPtr->installedEmpty() )
626 instVersion = slbPtr->installedObj()->edition().version();
629 if ( slbPtr->hasCandidateObj() )
631 version = slbPtr->candidateObj()->edition().version();
636 version = pkgPtr->edition().version();
638 pkgLine.push_back( version );
640 if ( haveInstalledVersion )
642 pkgLine.push_back( instVersion );
645 status = slbPtr->status();
647 zypp::ByteCount size = pkgPtr->installSize();
648 pkgLine.push_back( size.asString( 8 ) );
652 if ( slbPtr->source_install() )
654 pkgLine.push_back(
" x " );
659 pkgLine.push_back(
" " );
680 std::vector<std::string> pkgLine;
683 pkgLine.push_back( text );
699 std::vector<std::string> pkgLine;
702 if ( !patchPtr || !slb )
704 yuiError() <<
"No valid patch available" << endl;
708 pkgLine.push_back( slb->name() );
710 if ( !patchPtr->summary().empty() )
711 pkgLine.push_back( patchPtr->summary() );
713 pkgLine.push_back( slb->name() );
715 pkgLine.push_back( patchPtr->category() );
716 pkgLine.push_back( patchPtr->edition().asString() );
748 if (objPtr && slbPtr)
750 updateInfo( objPtr, slbPtr, VisibleInfo() );
751 packager->PackageLabel()->setLabel( slbPtr->name() );
756 if (objPtr && slbPtr )
757 updateInfo( objPtr, slbPtr, VisibleInfo() );
777 NCursesEvent ret = NCursesEvent::none;
782 if ( packager->isTestMode() )
784 if ( packager->diskSpacePopup() )
785 packager->diskSpacePopup()->setDiskSpace( key );
809 NCTable::wHandleInput( key);
819 changeObjStatus( key );
826 NCDialog * currentDialog =
static_cast<NCDialog *
>(YDialog::topmostDialog());
828 currentDialog->setStatusLine();
830 return NCursesEvent::handled;
846 return cc->getStatus();
856 return cc->getDataPointer();
866 return cc->getSelPointer();
872 NCTableLine * cl = myPad()->ModifyLine( index );
877 YTableItem *it =
dynamic_cast<YTableItem*
> (cl->origItem() );
878 YTableCell *tcell = it->cell(0);
890 bool NCPkgTable::SourceInstall(
bool install )
892 int index = getCurrentItem();
898 yuiError() <<
"Invalid Pointer" << endl;
901 ZyppSel selPtr = objPtr->getSelectable();
902 NCTableLine * currentLine = myPad()->ModifyLine( index );
904 if ( !selPtr || !currentLine )
906 yuiError() <<
"Invalid Selectable" << endl;
910 NCTableCol * currentCol = currentLine->GetCol( currentLine->Cols()-1 );
912 if ( install && selPtr->providesSources() )
914 ok = selPtr->set_source_install(
true );
915 yuiMilestone() <<
"Set source install returns: " << (ok?
"true":
"false") << endl;
917 currentCol->SetLabel( NClabel(
" x " ) );
919 else if ( !install && selPtr->source_install() )
921 ok = selPtr->set_source_install(
false );
922 yuiMilestone() <<
"ReSet source install returns: " << (ok?
"true":
"false") << endl;
924 currentCol->SetLabel( NClabel(
" " ) );
936 bool NCPkgTable::toggleObjStatus( )
944 ZyppStatus newStatus;
946 bool ok = statusStrategy->
toggleStatus( slbPtr, objPtr, newStatus );
961 bool NCPkgTable::changeObjStatus(
int key )
970 ZyppStatus newStatus;
972 bool ok = statusStrategy->
keyToStatus( key, slbPtr, objPtr, newStatus );
986 bool NCPkgTable::changeListObjStatus( NCPkgTableListAction type )
988 ZyppStatus newStatus;
990 unsigned int index = 0;
992 while ( index < size )
1003 if ( slbPtr->status() == S_NoInst )
1004 ok = statusStrategy->
keyToStatus(
'+', slbPtr, objPtr, newStatus );
1008 if ( slbPtr->installedObj() && slbPtr->status() != S_Protected )
1009 ok = statusStrategy->
keyToStatus(
'-', slbPtr, objPtr, newStatus );
1012 case A_UpdateNewer: {
1014 if ( slbPtr->installedObj() && slbPtr->status() != S_Protected && slbPtr->updateCandidateObj() )
1016 slbPtr->setOnSystem( slbPtr->updateCandidateObj() );
1017 ok = statusStrategy->
keyToStatus(
'>', slbPtr, objPtr, newStatus );
1022 if ( slbPtr->installedObj() && slbPtr->status() != S_Protected )
1023 ok = statusStrategy->
keyToStatus(
'>', slbPtr, objPtr, newStatus );
1027 if ( slbPtr->status() == S_Install
1028 || slbPtr->status() == S_AutoInstall
1029 || slbPtr->status() == S_Update
1030 || slbPtr->status() == S_AutoUpdate )
1031 ok = statusStrategy->
keyToStatus(
'<', slbPtr, objPtr, newStatus );
1032 else if ( slbPtr->status() == S_Del
1033 || slbPtr->status() == S_AutoDel )
1034 ok = statusStrategy->
keyToStatus(
'+', slbPtr, objPtr, newStatus );
1038 yuiError() <<
"Unknown list action" << endl;
1062 bool NCPkgTable::fillAvailableList ( ZyppSel slb )
1064 bool addInstalled =
true;
1067 yuiError() <<
"Package pointer not valid" << endl;
1074 yuiDebug() <<
"Number of available packages: " << slb->availableSize() << endl;
1077 zypp::ui::Selectable::available_iterator
1078 b = slb->availableBegin (),
1079 e = slb->availableEnd (),
1081 for (it = b; it != e; ++it)
1084 if ( slb->installedObj() &&
1085 slb->installedObj()->edition() == (*it)->edition() &&
1086 slb->installedObj()->arch() == (*it)->arch() )
1089 addInstalled =
false;
1093 if ( (! slb->installedEmpty()) && addInstalled )
1103 setCurrentItem( 0 );
1109 bool NCPkgTable::fillSummaryList( NCPkgTable::NCPkgTableListType type )
1115 std::list<ZyppSel> pkgList( zyppPkgBegin (), zyppPkgEnd () );
1116 pkgList.sort( sortByName );
1119 std::list<ZyppSel>::iterator listIt;
1131 for ( listIt = pkgList.begin(); listIt != pkgList.end(); ++listIt )
1133 ZyppSel selectable = *listIt;
1134 ZyppPkg pkg = tryCastToZyppPkg (selectable->theObj ());
1138 case NCPkgTable::L_Changes: {
1139 if ( selectable->status() != S_NoInst
1140 && selectable->status() != S_KeepInstalled )
1146 case NCPkgTable::L_Installed: {
1147 if ( selectable->status() == S_KeepInstalled )
1164 void NCPkgTable::updateInfo( ZyppObj pkgPtr, ZyppSel slbPtr, NCPkgTableInfoType mode )
1169 if ( packager->InfoText() )
1170 packager->InfoText()->longDescription( pkgPtr );
1173 if ( packager->InfoText() )
1174 packager->InfoText()->technicalData( pkgPtr, slbPtr );
1177 if ( packager->InfoText() )
1178 packager->InfoText()->fileList( slbPtr );
1181 if ( packager->InfoText() )
1182 packager->InfoText()->dependencyList( pkgPtr, slbPtr );
1185 if ( packager->VersionsList() )
1186 packager->VersionsList()->fillAvailableList( slbPtr );
1189 if ( packager->InfoText() )
1190 packager->InfoText()->patchDescription( pkgPtr, slbPtr );
1193 if ( packager->PatchPkgs() )
1196 case I_PatchPkgsVersions:
1197 if ( packager->PatchPkgsVersions() )