summaryrefslogtreecommitdiff
path: root/src/UnityProgressBar.vala
blob: d28428ea2804773a99a5f9938ea55f4c1838cd66 (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
/* Copyright 2010-2015 Yorba Foundation
 *
 * This software is licensed under the GNU Lesser General Public License
 * (version 2.1 or later).  See the COPYING file in this distribution.
 */

#if UNITY_SUPPORT
public class UnityProgressBar : Object {

    private static Unity.LauncherEntry l = Unity.LauncherEntry.get_for_desktop_id("shotwell.desktop");
    private static UnityProgressBar? visible_uniprobar;

    private double progress;
    private bool visible;

    public static UnityProgressBar get_instance() {
        if (visible_uniprobar == null) {
            visible_uniprobar = new UnityProgressBar();
        }

        return visible_uniprobar;
    }

    private UnityProgressBar() {
        progress = 0.0;
        visible = false;
    }

    ~UnityProgressBar () {
        reset_progress_bar();
    }
    
    public double get_progress () {
        return progress;
    }
    
    public void set_progress (double percent) {
        progress = percent;
        update_visibility();
    }

    private void update_visibility () {
        set_progress_bar(this, progress);
    }
    
    public bool get_visible () {
        return visible;
    }
    
    public void set_visible (bool visible) {
        this.visible = visible;

        if (!visible) {
            //if not visible and currently displayed, remove Unity progress bar
            reset_progress_bar();
        } else {
            //update_visibility if this progress bar wants to be drawn
            update_visibility();            
        }
    }

    public void reset () {
        set_visible(false);
        progress = 0.0;
    }
    
    private static void set_progress_bar (UnityProgressBar uniprobar, double percent) {
        //set new visible ProgressBar
        visible_uniprobar = uniprobar;
        if (!l.progress_visible)
            l.progress_visible = true;
        l.progress = percent;
    }
    
    private static void reset_progress_bar () {
        //reset to default values
        visible_uniprobar = null;
        l.progress = 0.0;
        l.progress_visible = false;
    }
}

#endif