1/* 2 * Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef PROBLEM_WINDOW_H 6#define PROBLEM_WINDOW_H 7 8 9#include <map> 10#include <set> 11 12#include <Window.h> 13 14 15namespace BPackageKit { 16 class BSolver; 17 class BSolverPackage; 18 class BSolverProblem; 19 class BSolverProblemSolution; 20 class BSolverProblemSolutionElement; 21} 22 23using BPackageKit::BSolver; 24using BPackageKit::BSolverPackage; 25using BPackageKit::BSolverProblem; 26using BPackageKit::BSolverProblemSolution; 27using BPackageKit::BSolverProblemSolutionElement; 28 29class BButton; 30class BGroupView; 31class BRadioButton; 32 33 34class ProblemWindow : public BWindow { 35public: 36 typedef std::set<BSolverPackage*> SolverPackageSet; 37 38public: 39 ProblemWindow(); 40 virtual ~ProblemWindow(); 41 42 bool Go(BSolver* solver, 43 const SolverPackageSet& packagesAddedByUser, 44 const SolverPackageSet& 45 packagesRemovedByUser); 46 47 virtual bool QuitRequested(); 48 virtual void MessageReceived(BMessage* message); 49 50private: 51 struct Solution; 52 53 typedef std::map<BRadioButton*, Solution> SolutionMap; 54 55private: 56 void _ClearProblemsGui(); 57 void _AddProblemsGui(BSolver* solver); 58 void _AddProblem(BSolverProblem* problem, 59 const float backgroundTint); 60 BString _SolutionElementText( 61 const BSolverProblemSolutionElement* 62 element) const; 63 bool _AnySolutionSelected() const; 64 65private: 66 sem_id fDoneSemaphore; 67 bool fClientWaiting; 68 bool fAccepted; 69 BGroupView* fContainerView; 70 BButton* fCancelButton; 71 BButton* fRetryButton; 72 SolutionMap fSolutions; 73 const SolverPackageSet* fPackagesAddedByUser; 74 const SolverPackageSet* fPackagesRemovedByUser; 75}; 76 77 78#endif // PROBLEM_WINDOW_H 79