… | |
… | |
2800 | fontsize => 0.9, |
2800 | fontsize => 0.9, |
2801 | valign => 0, |
2801 | valign => 0, |
2802 | align => 0, |
2802 | align => 0, |
2803 | can_events => 1, |
2803 | can_events => 1, |
2804 | ellipsise => 1, |
2804 | ellipsise => 1, |
|
|
2805 | label => "%d%%", |
2805 | %arg, |
2806 | %arg, |
2806 | text => "-", |
|
|
2807 | value => -1, |
|
|
2808 | ); |
2807 | ); |
2809 | |
2808 | |
2810 | $self->set_value ($arg{value}) if exists $arg{value}; |
2809 | $self->set_value ($arg{value} || -1); |
2811 | |
2810 | |
2812 | $self |
2811 | $self |
|
|
2812 | } |
|
|
2813 | |
|
|
2814 | sub set_label { |
|
|
2815 | my ($self, $label) = @_; |
|
|
2816 | |
|
|
2817 | return if $self->{label} eq $label; |
|
|
2818 | $self->{label} = $label; |
|
|
2819 | |
|
|
2820 | $self->CFPlus::UI::Progress::set_value (0 + delete $self->{value}); |
2813 | } |
2821 | } |
2814 | |
2822 | |
2815 | sub set_value { |
2823 | sub set_value { |
2816 | my ($self, $value) = @_; |
2824 | my ($self, $value) = @_; |
2817 | |
2825 | |
2818 | if ($self->{value} != $value) { |
2826 | if ($self->{value} ne $value) { |
2819 | $self->{value} = $value; |
2827 | $self->{value} = $value; |
|
|
2828 | |
|
|
2829 | if ($value < 0) { |
|
|
2830 | $self->set_text ("-"); |
|
|
2831 | } else { |
2820 | $self->set_text (sprintf "%d%%", $value * 100); |
2832 | $self->set_text (sprintf $self->{label}, $value * 100); |
|
|
2833 | } |
|
|
2834 | |
2821 | $self->update; |
2835 | $self->update; |
2822 | } |
2836 | } |
2823 | } |
2837 | } |
2824 | |
2838 | |
2825 | sub _draw { |
2839 | sub _draw { |
… | |
… | |
2856 | |
2870 | |
2857 | sub new { |
2871 | sub new { |
2858 | my ($class, %arg) = @_; |
2872 | my ($class, %arg) = @_; |
2859 | |
2873 | |
2860 | my $self = $class->SUPER::new ( |
2874 | my $self = $class->SUPER::new ( |
|
|
2875 | tooltip => sub { |
|
|
2876 | my ($self) = @_; |
|
|
2877 | |
|
|
2878 | sprintf "%s points experience (level %d).\n%s points to next level %s.", |
|
|
2879 | ::formsep $self->{exp}, |
|
|
2880 | $self->{lvl}, |
|
|
2881 | ::formsep $self->{nxt} |
|
|
2882 | }, |
2861 | %arg |
2883 | %arg |
2862 | ); |
2884 | ); |
2863 | |
2885 | |
2864 | $::CONN->{on_exp_update}{$self+0} = sub { $self->set_value ($self->{value}) } |
2886 | $::CONN->{on_exp_update}{$self+0} = sub { $self->set_value ($self->{value}) } |
2865 | if $::CONN; |
2887 | if $::CONN; |
… | |
… | |
2877 | } |
2899 | } |
2878 | |
2900 | |
2879 | sub set_value { |
2901 | sub set_value { |
2880 | my ($self, $lvl, $exp) = @_; |
2902 | my ($self, $lvl, $exp) = @_; |
2881 | |
2903 | |
|
|
2904 | $self->{lvl} = $exp; |
|
|
2905 | $self->{exp} = $exp; |
|
|
2906 | |
2882 | my $v = 0; |
2907 | my $v = -1; |
2883 | |
2908 | |
2884 | if ($::CONN && (my $table = $::CONN->{exp_table})) { |
2909 | if ($::CONN && (my $table = $::CONN->{exp_table})) { |
2885 | my $l0 = $table->[$lvl - 1]; |
2910 | my $l0 = $table->[$lvl - 1]; |
2886 | my $l1 = $table->[$lvl]; |
2911 | my $l1 = $table->[$lvl]; |
|
|
2912 | |
|
|
2913 | $self->{nxt} = $l1; |
2887 | |
2914 | |
2888 | $v = ($exp - $l0) / ($l1 - $l0); |
2915 | $v = ($exp - $l0) / ($l1 - $l0); |
2889 | } |
2916 | } |
2890 | |
2917 | |
2891 | $self->SUPER::set_value ($v); |
2918 | $self->SUPER::set_value ($v); |
… | |
… | |
3930 | |
3957 | |
3931 | ############################################################################# |
3958 | ############################################################################# |
3932 | |
3959 | |
3933 | package CFPlus::UI::Notebook; |
3960 | package CFPlus::UI::Notebook; |
3934 | |
3961 | |
|
|
3962 | use CFPlus::OpenGL; |
|
|
3963 | |
3935 | our @ISA = CFPlus::UI::VBox::; |
3964 | our @ISA = CFPlus::UI::VBox::; |
3936 | |
3965 | |
3937 | sub new { |
3966 | sub new { |
3938 | my $class = shift; |
3967 | my $class = shift; |
3939 | |
3968 | |
3940 | my $self = $class->SUPER::new ( |
3969 | my $self = $class->SUPER::new ( |
3941 | buttonbar => (new CFPlus::UI::Buttonbar), |
3970 | buttonbar => (new CFPlus::UI::Buttonbar), |
3942 | multiplexer => (new CFPlus::UI::Multiplexer expand => 1), |
3971 | multiplexer => (new CFPlus::UI::Multiplexer expand => 1), |
|
|
3972 | active_outline => [1, 1, 0], |
3943 | # filter => # will be put between multiplexer and $self |
3973 | # filter => # will be put between multiplexer and $self |
3944 | @_, |
3974 | @_, |
3945 | ); |
3975 | ); |
3946 | |
3976 | |
3947 | $self->{filter}->add ($self->{multiplexer}) if $self->{filter}; |
3977 | $self->{filter}->add ($self->{multiplexer}) if $self->{filter}; |
… | |
… | |
4019 | sub set_current_page { |
4049 | sub set_current_page { |
4020 | my ($self, $page) = @_; |
4050 | my ($self, $page) = @_; |
4021 | |
4051 | |
4022 | $self->{multiplexer}->set_current_page ($page); |
4052 | $self->{multiplexer}->set_current_page ($page); |
4023 | $self->emit (page_changed => $self->{multiplexer}{current}); |
4053 | $self->emit (page_changed => $self->{multiplexer}{current}); |
|
|
4054 | } |
|
|
4055 | |
|
|
4056 | sub _draw { |
|
|
4057 | my ($self) = @_; |
|
|
4058 | |
|
|
4059 | $self->SUPER::_draw (); |
|
|
4060 | |
|
|
4061 | if (my $cur = $self->{multiplexer}{current}) { |
|
|
4062 | if ($cur = $cur->{c_tab_}) { |
|
|
4063 | glTranslate $cur->{x}, $cur->{y}; |
|
|
4064 | glLineWidth 3; |
|
|
4065 | glColor @{$self->{active_outline}}; |
|
|
4066 | glRect_lineloop 1, 1, $cur->{w} - 2, $cur->{h} - 2; |
|
|
4067 | glLineWidth 1; |
|
|
4068 | } |
|
|
4069 | } |
4024 | } |
4070 | } |
4025 | |
4071 | |
4026 | ############################################################################# |
4072 | ############################################################################# |
4027 | |
4073 | |
4028 | package CFPlus::UI::Selector; |
4074 | package CFPlus::UI::Selector; |