summaryrefslogtreecommitdiffstats
path: root/adept/installer/app.h
blob: e20640c2fa53c80c376584fdab781c329e9ad41d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- C++ -*- */
#ifndef TESTUI_APP_H
#define TESTUI_APP_H

#include <kmainwindow.h>
#include <tdeparts/part.h>
#include <kactionclasses.h>
#include <apt-front/cache/observer.h>
#include <apt-front/cache/component/state.h>
#include <apt-front/cache/component/history.h>
#include <apt-front/cache/component/desktop.h>
#include <adept/view.h>
#include <adept/commitprogress.h>
#include <adept/installerview.h>
#include <adept/application.h>

class TQVBox;
class TQWidgetStack;
class TQSplitter;
class TDEAction;
class KPushButton;
class TDEProcess;
namespace adept {
class AcqProgressWidget;
}

using namespace aptFront;
using namespace adept;

struct GroupPolicy : cache::component::Desktop::GroupPolicy {
    virtual std::string groupForCategories( utils::Range< std::string > );
};

struct IconPolicy : GroupedDesktopSelector::IconPolicy {
    virtual TQString iconForGroup( TQString );
};

class App : public TDEMainWindow, Application {
    Q_OBJECT
    
public:
    enum State { Select, Preview, Inspect, Commit };
    void setupActions();
    ExtTerminalInterface *terminal();
	App();

    // check if the changes in cache are consistent with what is
    // checked in the tree and we don't have any suspicious removals
    // or other artifacts (broken packages)
    bool consistent();

protected slots:
    void start();
    void commit();
    void inspect();

    void delayed();

    void undo() { Application::undo(); }
    void redo() { Application::redo(); }
    void checkpoint() { Application::checkpoint(); }

    void setHistoryEnabled( bool );

    void disableNext();
    void disableButtons();
    void setNext( TQString str, const char *slot );
    void togglePreview();
    void editSources();

    void request( cache::entity::Package, cache::component::State::Action );

    bool confirmRequest( entity::Package, component::State::Action );
    void requestOk() { m_currentRequestOk = true; }

protected:
    friend class WaitForLister;

    void setState( State s ) { m_lastState = m_state; m_state = s; }

    virtual void notifyPreRebuild( cache::component::Base * );
    virtual void notifyPostChange( cache::component::Base * );
    virtual void notifyPreChange( cache::component::Base * );

    TQWidgetStack *m_stack;
    TQVBox *m_all;
    TQHBox *m_buttons;
    TQLabel *m_bye, *m_loading;
    KPushButton *m_next, *m_quit;
    KPushButton *m_editSources, *m_reviewChanges;

    // stacked widgets
    adept::AcqProgressWidget *m_progress;
    adept::CommitProgress *m_commitProgress;
    // adept::GroupedDesktopSelector *m_desktopSelector;
    adept::InstallerView *m_view;
    adept::Browser *m_preview;

    // other stuff
    std::vector<TDEAction *> m_actions;
    TQMap< TQString, TQString > m_icons;
    TDEAction *m_undo, *m_redo;
    TDEToggleAction *m_previewAction;
    State m_state, m_lastState;

    typedef std::list< component::State::Request > RequestList;
    RequestList m_requests;

    // XXX hack
    bool m_currentRequestOk;
};

class WaitForLister : public TQObject {
    Q_OBJECT
    
public:
    WaitForLister( App *a, const char *s )
        : app( a ), slot( s )
        {
            waiting();
        }
protected slots:
    void waiting();
protected:
    App *app;
    const char *slot;

};

#endif