tab_hotkeys => _('Hotkeys'),
tab_info => _('Info'),
- ab_frame => _('Addressbook'),
- mem_frame => _('Memory'),
- msgview_frame => _('Message View'),
- log_frame => _('Log window'),
- dnd_frame => _('Drag \'n\' drop'),
- ssl_frame => _('Secure Sockets Layer'),
- msgs_frame => _('Messages'),
- swc_frame => _('Completion'),
- stripes_frame => _('Coloured stripes'),
- sbar_frame => _('Scroll bars'),
- mlist_frame => _('Message List'),
- mview_frame => _('Message View'),
- compo_frame => _('Compose window'),
- netm_frame => _('NetworkManager'),
- diff_frame => _('Viewing patches'),
- mpass_frame => _('Master passphrase'),
- compose_frame => _('Compose window'),
- qs_frame => _('Quick search'),
-
l_oth_use_dlg => _('Use detached address book edit dialogue'),
h_oth_use_dlg => _('If true use a separate dialogue to edit a person\'s details. Otherwise will use a form embedded in the address book\'s main window.'),
l_oth_max_use => _('Maximum memory for message cache'),
# modification flag
my $MODIFIED = 0;
-# index constants for preference arrays
-use constant NAME => 0; # the name on the rc file
-use constant LABEL => 1; # the label on the GUI
-use constant DESC => 2; # the description for the hint/help
-use constant TYPE => 3; # data type: bool, int, float, string, color
-use constant CMVER => 4; # lowest[,highest] Claws Mail version(s) the feature exists
-use constant CMDEF => 5; # default value for the preference in Claws Mail
-use constant PLUGIN => 6; # plugin section (only in plugin preferences)
-
-# constants for GUI spacing
-use constant HBOX_PAD => 5;
-use constant FRAME_SPC => 2;
-use constant PAGE_SPC => 5;
+use constant {
+ # index constants for preference arrays
+ NAME => 0, # the name on the rc file
+ LABEL => 1, # the label on the GUI
+ DESC => 2, # the description for the hint/help
+ TYPE => 3, # data type: bool, int, float, string, color
+ CMVER => 4, # lowest[,highest] Claws Mail version(s) the feature exists
+ CMDEF => 5, # default value for the preference in Claws Mail
+ PLUGIN => 6, # plugin section (only in plugin preferences)
+ # constants for GUI spacing
+ HBOX_PAD => 5,
+ GRID_SPC => 10,
+};
# for data references indexing
use constant VALUE => 0;
if defined $$dataref->[IVALUE];
}
-sub handle_string_value {
- my ($widget, $event, $dataref) = @_;
- $$dataref->[VALUE] = $widget->get_text ();
- $MODIFIED += $$dataref->[VALUE] ne $$dataref->[IVALUE]? 1: -1
- if defined $$dataref->[IVALUE];
-}
-
sub handle_nchar_value {
my ($widget, $event, $dataref, $minlen, $maxlen) = @_;
$_ = substr ($widget->get_text (), 0, $maxlen);
# more graphic helpers
-sub new_hbox_pack {
- my $hbox = Gtk3::HBox->new (FALSE);
- $hbox->set_border_width (PAGE_SPC);
- foreach (@_) {
- $hbox->pack_start ($_, FALSE, FALSE, 0);
- }
- return $hbox;
-}
-
-sub new_hbox_pack_compact {
- my $hbox = Gtk3::HBox->new (FALSE);
- $hbox->set_border_width (0);
- foreach (@_) {
- $hbox->pack_start ($_, FALSE, FALSE, 0);
- }
- return $hbox;
-}
-
-sub new_vbox_pack {
- my $vbox = Gtk3::VBox->new (FALSE, 5);
- $vbox->set_border_width (PAGE_SPC);
- foreach (@_) {
- $vbox->pack_start ($_, FALSE, FALSE, 0);
- }
- return $vbox;
-}
-
-sub new_vbox_pack_compact {
- my $vbox = Gtk3::VBox->new (FALSE, 0);
- $vbox->set_border_width (0);
- foreach (@_) {
- $vbox->pack_start ($_, FALSE, FALSE, 0);
+sub new_grid {
+ my ($border_w, $row_s, $col_s) = @_;
+ $border_w //= GRID_SPC;
+ $row_s //= GRID_SPC;
+ $col_s //= GRID_SPC;
+ my $grid = Gtk3::Grid->new;
+ $grid->set_border_width ($border_w);
+ $grid->set_row_spacing ($row_s);
+ $grid->set_column_spacing ($col_s);
+ return $grid;
+}
+
+sub new_label {
+ my $text = shift;
+ $text //= '';
+ my $label = Gtk3::Label->new ($text);
+ $label->set_alignment (0, 0.5);
+ return $label;
+}
+
+sub new_title {
+ my $text = shift;
+ $text //= '';
+ my $label = Gtk3::Label->new ('<b>' . $text . '</b>');
+ $label->set_use_markup (TRUE);
+ $label->set_alignment (0, 0.5);
+ return $label;
+}
+
+sub new_grid_pack {
+ my ($width, $height, $widget) = @_;
+ my $grid = new_grid ();
+ $grid->set_column_homogeneous (TRUE);
+ for (my $i = 0; $i < $width; ++$i) {
+ for (my $j = 0; $j < $height; ++$j) {
+ my $wid = $widget->[$j]->[$i];
+ next unless defined $wid;
+ my $ww = (($i + 1 < $width) and (defined $widget->[$j]->[$i + 1]))
+ ? 1
+ : $width - $i;
+ if (ref $wid) {
+ $grid->attach ($wid, $i, $j, $ww, 1);
+ } else { # not a widget
+ if ('--' eq $wid) { # a separator
+ $grid->attach (Gtk3::Separator->new ('horizontal'),
+ $i, $j, $ww, 1);
+ } else { # or a title
+ $grid->attach (new_title ($wid),
+ $i, $j, $ww, 1);
+ }
+ }
+ }
}
- return $vbox;
-}
-
-sub new_subpage_frame {
- my ($box, $title, $notpacked) = @_;
- my $frame = Gtk3::Frame->new ($title);
- $frame->add ($box);
- return new_vbox_pack ($frame) unless defined ($notpacked);
- return $frame;
+ return $grid;
}
# preference maps and corresponding page creation subs
);
sub new_other_page() {
- return new_vbox_pack (
- new_subpage_frame (
- new_vbox_pack (
- new_check_button_for(\%pr::oth, 'use_dlg', \%HPVALUE)),
- $xl::s{ab_frame}, 'not-packed'),
- new_subpage_frame (
- new_vbox_pack (
- new_text_box_for_int(\%pr::oth, 'max_use', \%HPVALUE),
- new_text_box_for_int(\%pr::oth, 'min_time', \%HPVALUE)),
- $xl::s{mem_frame}, 'not-packed'),
- new_subpage_frame (
- new_vbox_pack (
- new_check_button_for(\%pr::oth, 'use_netm', \%HPVALUE)),
- $xl::s{netm_frame}, 'not-packed'),
- new_subpage_frame (
- new_vbox_pack (
- new_text_box_for_int(\%pr::oth, 'mp_rounds', \%HPVALUE)),
- $xl::s{mpass_frame}, 'not-packed')
- );
+ return new_grid_pack (1, 12, [
+ [ _('Addressbook') ],
+ [ new_check_button_for(\%pr::oth, 'use_dlg', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Memory') ],
+ [ new_text_box_for_int(\%pr::oth, 'max_use', \%HPVALUE) ],
+ [ new_text_box_for_int(\%pr::oth, 'min_time', \%HPVALUE) ],
+ [ '--' ],
+ [ _('NetworkManager') ],
+ [ new_check_button_for(\%pr::oth, 'use_netm', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Master passphrase') ],
+ [ new_text_box_for_int(\%pr::oth, 'mp_rounds', \%HPVALUE) ]
+ ]);
}
%pr::gui = ( # gui bells and whistles
);
sub new_gui_page() {
- my $gf = Gtk3::VBox->new (FALSE, 5);
- $gf->set_border_width (PAGE_SPC);
-
- my $cb_dot_lines = new_check_button_for (\%pr::gui, 'dot_lines', \%HPVALUE);
- my $cb_toolbar_d = new_check_button_for (\%pr::gui, 'toolbar_d', \%HPVALUE);
- my $tb_zero_char = new_text_box_for_nchar (\%pr::gui, 'zero_char', \%HPVALUE);
-
- $gf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::gui, 'strip_all', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'strip_sum', \%HPVALUE),
- new_text_box_for_int (\%pr::gui, 'strip_off', \%HPVALUE)),
- $xl::s{stripes_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $gf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::gui, 'b_unread', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'swp_from', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'two_linev', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'next_del', \%HPVALUE),
- new_selection_box_for (\%pr::gui, 'from_show', \%HPVALUE)),
- $xl::s{mlist_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $gf->pack_start (new_subpage_frame (
- new_hbox_pack (
- new_check_button_for (\%pr::gui, 'cursor_v', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'mview_date', \%HPVALUE)),
- $xl::s{mview_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $gf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_hbox_pack_compact (
- new_check_button_for (\%pr::gui, 'no_markup', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'margin_co', \%HPVALUE),
- new_check_button_for (\%pr::gui, 'type_any', \%HPVALUE)),
- new_text_box_for_int (\%pr::gui, 'warn_send_multi', \%HPVALUE)),
- $xl::s{compo_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $gf->pack_start ($cb_dot_lines, FALSE, FALSE, 0);
- $gf->pack_start ($cb_toolbar_d, FALSE, FALSE, 0);
- $gf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::gui, 'h_scroll', \%HPVALUE),
- new_selection_box_for (\%pr::gui, 'v_scroll', \%HPVALUE)),
- $xl::s{sbar_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $gf->pack_start ($tb_zero_char, FALSE, FALSE, 0);
-
- return $gf;
+ return new_grid_pack (2, 24, [
+ [ _('Coloured stripes') ],
+ [ new_check_button_for (\%pr::gui, 'strip_all', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'strip_sum', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::gui, 'strip_off', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Message List') ],
+ [ new_check_button_for (\%pr::gui, 'b_unread', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'swp_from', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::gui, 'two_linev', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'next_del', \%HPVALUE) ],
+ [ new_selection_box_for (\%pr::gui, 'from_show', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Message View') ],
+ [ new_check_button_for (\%pr::gui, 'cursor_v', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'mview_date', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Compose window') ],
+ [ new_check_button_for (\%pr::gui, 'no_markup', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'margin_co', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::gui, 'type_any', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::gui, 'warn_send_multi', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Scroll bars') ],
+ [ new_check_button_for (\%pr::gui, 'h_scroll', \%HPVALUE) ],
+ [ new_selection_box_for (\%pr::gui, 'v_scroll', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Other') ],
+ [ new_check_button_for (\%pr::gui, 'dot_lines', \%HPVALUE),
+ new_check_button_for (\%pr::gui, 'toolbar_d', \%HPVALUE) ],
+ [ new_text_box_for_nchar (\%pr::gui, 'zero_char', \%HPVALUE) ]
+ ]);
}
%pr::beh = ( # tweak some behaviour
);
sub new_behaviour_page() {
- my $bf = Gtk3::VBox->new (FALSE, 5);
- $bf->set_border_width (PAGE_SPC);
-
- my $tb_up_step = new_text_box_for_int (\%pr::beh, 'up_step', \%HPVALUE);
- my $tb_thread_a = new_text_box_for_int (\%pr::beh, 'thread_a', \%HPVALUE);
-
- $bf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_text_box_for_int (\%pr::beh, 'hover_t', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'warn_dnd', \%HPVALUE)),
- $xl::s{dnd_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $bf->pack_start (new_subpage_frame (
- new_hbox_pack (
- new_check_button_for (\%pr::beh, 'skip_ssl', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'unsafe_ssl', \%HPVALUE)),
- $xl::s{ssl_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $bf->pack_start ($tb_up_step, FALSE, FALSE, 0);
- $bf->pack_start ($tb_thread_a, FALSE, FALSE, 0);
- $bf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::beh, 'flowed', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'parts_rw', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'use_utf8', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'dangerous', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'out_ascii', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'pp_unsel', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'inline_at', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'rewrite_ff', \%HPVALUE)),
- $xl::s{msgs_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- $bf->pack_start (new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::beh, 'addr_swc', \%HPVALUE),
- new_check_button_for (\%pr::beh, 'fold_swc', \%HPVALUE)),
- $xl::s{swc_frame}, 'not-packed'),
- FALSE, FALSE, FRAME_SPC);
- return $bf;
+ return new_grid_pack (2, 20, [
+ [ _('Drag \'n\' drop') ],
+ [ new_text_box_for_int (\%pr::beh, 'hover_t', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::beh, 'warn_dnd', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Secure Sockets Layer') ],
+ [ new_check_button_for (\%pr::beh, 'skip_ssl', \%HPVALUE),
+ new_check_button_for (\%pr::beh, 'unsafe_ssl', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Messages') ],
+ [ new_check_button_for (\%pr::beh, 'flowed', \%HPVALUE),
+ new_check_button_for (\%pr::beh, 'out_ascii', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::beh, 'parts_rw', \%HPVALUE),
+ new_check_button_for (\%pr::beh, 'pp_unsel', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::beh, 'use_utf8', \%HPVALUE),
+ new_check_button_for (\%pr::beh, 'inline_at', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::beh, 'dangerous', \%HPVALUE),
+ new_check_button_for (\%pr::beh, 'rewrite_ff', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Completion') ],
+ [ new_check_button_for (\%pr::beh, 'addr_swc', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::beh, 'fold_swc', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Other') ],
+ [ new_text_box_for_int (\%pr::beh, 'up_step', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::beh, 'thread_a', \%HPVALUE) ]
+ ]);
}
%pr::col = ( # a variety of colours
);
sub new_colours_page() {
- return new_vbox_pack (
- new_subpage_frame (
- new_vbox_pack (
- new_color_button_for (\%pr::col, 'emphasis', \%HPVALUE),
- new_hbox_pack_compact (
- new_color_button_for (\%pr::col, 'tags_text', \%HPVALUE),
- new_color_button_for (\%pr::col, 'tags_bg', \%HPVALUE))),
- $xl::s{msgview_frame}, 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_vbox_pack_compact (
- new_color_button_for (\%pr::col, 'log_err', \%HPVALUE),
- new_color_button_for (\%pr::col, 'log_warn', \%HPVALUE),
- new_color_button_for (\%pr::col, 'log_msg', \%HPVALUE)),
- new_vbox_pack_compact (
- new_color_button_for (\%pr::col, 'log_in', \%HPVALUE),
- new_color_button_for (\%pr::col, 'log_out', \%HPVALUE))),
- $xl::s{log_frame}, 'not-packed'),
- new_subpage_frame (
- new_vbox_pack (
- new_color_button_for (\%pr::col, 'diff_add', \%HPVALUE),
- new_color_button_for (\%pr::col, 'diff_del', \%HPVALUE),
- new_color_button_for (\%pr::col, 'diff_hunk', \%HPVALUE)),
- $xl::s{diff_frame}, 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_color_button_for (\%pr::col, 'default_header_text', \%HPVALUE),
- new_color_button_for (\%pr::col, 'default_header_bg', \%HPVALUE)),
- $xl::s{compose_frame}, 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_vbox_pack_compact (
- new_color_button_for (\%pr::col, 'qs_active_text', \%HPVALUE),
- new_color_button_for (\%pr::col, 'qs_error_text', \%HPVALUE)),
- new_vbox_pack_compact (
- new_color_button_for (\%pr::col, 'qs_active_bg', \%HPVALUE),
- new_color_button_for (\%pr::col, 'qs_error_bg', \%HPVALUE))),
- $xl::s{qs_frame}, 'not-packed')
- );
+ return new_grid_pack (3, 18, [
+ [ _('Message View') ],
+ [ new_color_button_for (\%pr::col, 'emphasis', \%HPVALUE) ],
+ [ new_color_button_for (\%pr::col, 'tags_text', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'tags_bg', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Log window') ],
+ [ new_color_button_for (\%pr::col, 'log_err', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'log_in', \%HPVALUE) ],
+ [ new_color_button_for (\%pr::col, 'log_warn', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'log_out', \%HPVALUE) ],
+ [ new_color_button_for (\%pr::col, 'log_msg', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Viewing patches') ],
+ [ new_color_button_for (\%pr::col, 'diff_add', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'diff_del', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'diff_hunk', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Compose window') ],
+ [ new_color_button_for (\%pr::col, 'default_header_text', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'default_header_bg', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Quick search') ],
+ [ new_color_button_for (\%pr::col, 'qs_active_text', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'qs_active_bg', \%HPVALUE) ],
+ [ new_color_button_for (\%pr::col, 'qs_error_text', \%HPVALUE) ,
+ new_color_button_for (\%pr::col, 'qs_error_bg', \%HPVALUE) ]
+ ]);
}
%pr::win = ( # tweak window positions and/or sizes
);
sub new_winpos_subpage_main() {
- return new_subpage_frame (
- new_vbox_pack_compact (
- new_vbox_pack (
- new_text_box_for_int (\%pr::win, 'main_x', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'main_y', \%HPVALUE)),
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'main_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'main_h', \%HPVALUE)),
- new_vbox_pack (
- new_check_button_for (\%pr::win, 'main_fs', \%HPVALUE),
- new_check_button_for (\%pr::win, 'main_mx', \%HPVALUE))),
- _('Main window')
- );
+ return new_grid_pack (3, 7, [
+ [ _('Main window'), undef ],
+ [ new_text_box_for_int (\%pr::win, 'main_x', \%HPVALUE), undef ],
+ [ new_text_box_for_int (\%pr::win, 'main_y', \%HPVALUE), undef ],
+ [ new_text_box_for_int (\%pr::win, 'main_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'main_h', \%HPVALUE) ],
+ [ new_check_button_for (\%pr::win, 'main_fs', \%HPVALUE), undef ],
+ [ new_check_button_for (\%pr::win, 'main_mx', \%HPVALUE), undef ]
+ ]);
}
sub new_winpos_subpage_msgs() {
- return new_subpage_frame (
- new_vbox_pack_compact (
- new_vbox_pack (
- new_text_box_for_int (\%pr::win, 'msgs_x', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'msgs_y', \%HPVALUE)),
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'msgs_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'msgs_h', \%HPVALUE))),
- _('Message window')
- );
+ return new_grid_pack (3, 4, [
+ [ _('Message window') ],
+ [ new_text_box_for_int (\%pr::win, 'msgs_x', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::win, 'msgs_y', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::win, 'msgs_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'msgs_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_sendrecv() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'send_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'send_h', \%HPVALUE)),
- _('Send window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'recv_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'recv_h', \%HPVALUE)),
- _('Receive window'), 'not-packed')
- );
+ return new_grid_pack (3, 5, [
+ [ _('Send window') ],
+ [ new_text_box_for_int (\%pr::win, 'send_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'send_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Receive window') ],
+ [ new_text_box_for_int (\%pr::win, 'recv_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'recv_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_fold() {
- return new_vbox_pack (
- new_subpage_frame (
- new_vbox_pack_compact (
- new_vbox_pack (
- new_text_box_for_int (\%pr::win, 'fold_x', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'fold_y', \%HPVALUE)),
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'fold_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'fold_h', \%HPVALUE))),
- _('Folder window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'fsel_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'fsel_h', \%HPVALUE)),
- _('Folder selection window'), 'not-packed')
- );
+ return new_grid_pack (3, 7, [
+ [ _('Folder window') ],
+ [ new_text_box_for_int (\%pr::win, 'fold_x', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::win, 'fold_y', \%HPVALUE) ],
+ [ new_text_box_for_int (\%pr::win, 'fold_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'fold_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Folder selection window') ],
+ [ new_text_box_for_int (\%pr::win, 'fsel_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'fsel_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_addrbook() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'addr_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'addr_h', \%HPVALUE)),
- _('Addressbook main window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'adep_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'adep_h', \%HPVALUE)),
- _('Edit person window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'adeg_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'adeg_h', \%HPVALUE)),
- _('Edit group window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'adda_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'adda_h', \%HPVALUE)),
- _('Add address window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'addf_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'addf_h', \%HPVALUE)),
- _('Folder select window'), 'not-packed')
- );
+ return new_grid_pack (3, 14, [
+ [ _('Addressbook main window') ],
+ [ new_text_box_for_int (\%pr::win, 'addr_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'addr_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Edit person window') ],
+ [ new_text_box_for_int (\%pr::win, 'adep_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'adep_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Edit group window') ],
+ [ new_text_box_for_int (\%pr::win, 'adeg_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'adeg_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Add address window') ],
+ [ new_text_box_for_int (\%pr::win, 'adda_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'adda_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Folder select window') ],
+ [ new_text_box_for_int (\%pr::win, 'addf_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'addf_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_accounts() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'acco_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'acco_h', \%HPVALUE)),
- _('Accounts window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'acce_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'acce_h', \%HPVALUE)),
- _('Edit account window'), 'not-packed')
- );
+ return new_grid_pack (3, 5, [
+ [ _('Accounts window') ],
+ [ new_text_box_for_int (\%pr::win, 'acco_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'acco_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Edit account window') ],
+ [ new_text_box_for_int (\%pr::win, 'acce_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'acce_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_filtering() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'filt_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'filt_h', \%HPVALUE)),
- _('Filtering window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'fila_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'fila_h', \%HPVALUE)),
- _('Filtering actions window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'fild_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'fild_h', \%HPVALUE)),
- _('Filtering debug window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'matc_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'matc_h', \%HPVALUE)),
- _('Matcher window'), 'not-packed')
- );
+ return new_grid_pack (3, 11, [
+ [ _('Filtering window') ],
+ [ new_text_box_for_int (\%pr::win, 'filt_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'filt_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Filtering actions window') ],
+ [ new_text_box_for_int (\%pr::win, 'fila_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'fila_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Filtering debug window') ],
+ [ new_text_box_for_int (\%pr::win, 'fild_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'fild_h', \%HPVALUE) ],
+ [ '--' ],
+ [ ('Matcher window') ],
+ [ new_text_box_for_int (\%pr::win, 'matc_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'matc_h', \%HPVALUE) ]
+
+ ]);
}
sub new_winpos_subpage_useractions() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'acti_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'acti_h', \%HPVALUE)),
- _('User Actions prefs window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'acio_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'acio_h', \%HPVALUE)),
- _('User Actions I/O window'), 'not-packed')
- );
+ return new_grid_pack (3, 5, [
+ [ _('User Actions prefs window') ],
+ [ new_text_box_for_int (\%pr::win, 'acti_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'acti_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('User Actions I/O window') ],
+ [ new_text_box_for_int (\%pr::win, 'acio_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'acio_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_prefs() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'pref_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'pref_h', \%HPVALUE)),
- _('Preferences window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'temp_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'temp_h', \%HPVALUE)),
- _('Templates window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'tags_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'tags_h', \%HPVALUE)),
- _('Tags window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'plug_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'plug_h', \%HPVALUE)),
- _('Plugins window'), 'not-packed')
- );
+ return new_grid_pack (3, 11, [
+ [ _('Preferences window') ],
+ [ new_text_box_for_int (\%pr::win, 'pref_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'pref_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Templates window') ],
+ [ new_text_box_for_int (\%pr::win, 'temp_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'temp_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Tags window') ],
+ [ new_text_box_for_int (\%pr::win, 'tags_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'tags_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Plugins window') ],
+ [ new_text_box_for_int (\%pr::win, 'plug_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'plug_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_subpage_misc() {
- return new_vbox_pack (
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'logw_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'logw_h', \%HPVALUE)),
- _('Log window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'prin_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'prin_h', \%HPVALUE)),
- _('Print preview window'), 'not-packed'),
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::win, 'sour_w', \%HPVALUE),
- new_text_box_for_int (\%pr::win, 'sour_h', \%HPVALUE)),
- _('View source window'), 'not-packed')
- );
+ return new_grid_pack (3, 8, [
+ [ _('Log window') ],
+ [ new_text_box_for_int (\%pr::win, 'logw_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'logw_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('Print preview window') ],
+ [ new_text_box_for_int (\%pr::win, 'prin_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'prin_h', \%HPVALUE) ],
+ [ '--' ],
+ [ _('View source window') ],
+ [ new_text_box_for_int (\%pr::win, 'sour_w', \%HPVALUE),
+ new_text_box_for_int (\%pr::win, 'sour_h', \%HPVALUE) ]
+ ]);
}
sub new_winpos_page() {
sub new_account_subpage($) {
my ($akey) = @_;
- return new_vbox_pack (
- new_subpage_frame (
- new_vbox_pack (
- new_check_button_for (\%pr::acc, 'tls_set', $ACHPVALUE{$akey}),
- new_text_box_for_nchar (\%pr::acc, 'tls_pri', $ACHPVALUE{$akey})),
- _('GnuTLS priority'), 'not-packed')
- );
+ return new_grid_pack (1, 3, [
+ [ _('GnuTLS priority') ],
+ [ new_check_button_for (\%pr::acc, 'tls_set', $ACHPVALUE{$akey}) ],
+ [ new_text_box_for_nchar (\%pr::acc, 'tls_pri', $ACHPVALUE{$akey}) ]
+ ]);
}
sub new_accounts_page() {
my $name = $ACPREFS{$_}{'account_name'};
my $isdef = ($ACPREFS{$_}{'is_default'} eq '1');
my $page = new_account_subpage ($_);
- $accbook->append_page ($page,
- Gtk3::Label->new ($isdef? '<b>' . $name . '</b>': $name));
- if ($isdef) {
- my $label = $accbook->get_tab_label ($page);
- $label->set_use_markup (TRUE);
- }
+ my $label = new_label ($isdef? '<u>' . $name . '</u>': $name);
+ $label->set_use_markup (TRUE);
+ $accbook->append_page ($page, $label);
}
$accbook->set_scrollable (TRUE);
return $accbook;
);
sub new_plugins_page() {
- my %frame = ();
- $frame{'AttRemover'} =
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::plu, 'arm_winw', $PLHPVALUE{'AttRemover'}),
- new_text_box_for_int (\%pr::plu, 'arm_winh', $PLHPVALUE{'AttRemover'})),
- _('Attachment remover'), 'not-packed');
- $frame{'GPG'} =
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::plu, 'gpg_alimit', $PLHPVALUE{'GPG'})),
- _('GPG'), 'not-packed');
- $frame{'ManageSieve'} =
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_int (\%pr::plu, 'msv_winw', $PLHPVALUE{'ManageSieve'}),
- new_text_box_for_int (\%pr::plu, 'msv_winh', $PLHPVALUE{'ManageSieve'})),
- _('Sieve manager'), 'not-packed');
- $frame{'Libravatar'} =
- new_subpage_frame (
- new_hbox_pack (
- new_text_box_for_nchar (\%pr::plu, 'lav_burl', $PLHPVALUE{'Libravatar'})),
- _('Libravatar'), 'not-packed');
- $frame{'PerlPlugin'} =
- new_subpage_frame (
- new_hbox_pack (
- new_selection_box_for (\%pr::plu, 'prl_flvb', $PLHPVALUE{'PerlPlugin'})),
- _('Perl'), 'not-packed');
- foreach (@PLUGINS) {
- $frame{$_}->set_sensitive (defined $PLHPVALUE{$_});
+ my %widget = (
+ 'AttRemover' => [
+ new_text_box_for_int (\%pr::plu, 'arm_winw', $PLHPVALUE{'AttRemover'}),
+ new_text_box_for_int (\%pr::plu, 'arm_winh', $PLHPVALUE{'AttRemover'})
+ ],
+ 'GPG' => [
+ new_text_box_for_int (\%pr::plu, 'gpg_alimit', $PLHPVALUE{'GPG'})
+ ],
+ 'ManageSieve' => [
+ new_text_box_for_int (\%pr::plu, 'msv_winw', $PLHPVALUE{'ManageSieve'}),
+ new_text_box_for_int (\%pr::plu, 'msv_winh', $PLHPVALUE{'ManageSieve'})
+ ],
+ 'Libravatar' => [
+ new_text_box_for_nchar (\%pr::plu, 'lav_burl', $PLHPVALUE{'Libravatar'})
+ ],
+ 'PerlPlugin' => [
+ new_selection_box_for (\%pr::plu, 'prl_flvb', $PLHPVALUE{'PerlPlugin'})
+ ]
+ );
+ foreach my $pk (@PLUGINS) {
+ foreach my $wg (@{$widget{$pk}}) {
+ $wg->set_sensitive (defined $PLHPVALUE{$pk});
+ }
}
- return new_vbox_pack (
- $frame{'AttRemover'},
- $frame{'GPG'},
- $frame{'ManageSieve'},
- $frame{'Libravatar'},
- $frame{'PerlPlugin'});
+ return new_grid_pack (3, 14, [
+ [ _('Attachment remover') ], $widget{'AttRemover'}, [ '--' ],
+ [ _('GPG') ], $widget{'GPG'}, [ '--' ],
+ [ _('Sieve manager') ], $widget{'ManageSieve'}, [ '--' ],
+ [ _('Libravatar') ], $widget{'Libravatar'}, [ '--' ],
+ [ _('Perl') ], $widget{'PerlPlugin'}
+ ]);
}
use constant {
C_HOTKEY => 1,
C_GROUP => 2,
C_ACCEL => 3,
- C_BCOLOR => 4,
- # cell backgrounds
- BG_LIGHTER => '#ffffff',
- BG_DARKER => '#eeeeee'
+ C_ODDITY => 4,
};
sub new_hotkeys_list_label {
return $renderer;
}
+sub row_background_color {
+ my ($column, $isodd) = @_;
+ my $treeview = $column->get_tree_view;
+ my $stylectx = $treeview->get_style_context;
+ return $isodd
+ ? $stylectx->get_background_color ('normal')
+ : $stylectx->get_background_color ('insensitive');
+}
+
sub new_hotkeys_list {
my ($gkey, $group) = @_;
my $store = Gtk3::ListStore->new(
- qw/Glib::String Glib::String Glib::String Glib::String Glib::String/);
- my $even = FALSE;
+ qw/Glib::String Glib::String Glib::String Glib::String Glib::Boolean/);
+ my $even = TRUE;
foreach my $akey (sort keys %$group) {
my $iter = $store->append ();
my $hotkey = $group->{$akey}->{'key'};
my $label = $akey;
$label =~ s/[<>]//g; # <rrsyl> and <IMAPFolder> !?
- my $bgcol = $even ? BG_DARKER: BG_LIGHTER;
$store->set ($iter, C_LABEL, $label, C_HOTKEY, $hotkey,
- C_GROUP, $gkey, C_ACCEL, $akey, C_BCOLOR, $bgcol);
+ C_GROUP, $gkey, C_ACCEL, $akey, C_ODDITY, $even);
$even = not $even;
}
my $treeview = Gtk3::TreeView->new_with_model ($store);
'markup' => '<span size="smaller">'
. $model->get_value ($iter, C_LABEL)
. '</span>');
- $renderer->set_property (
- 'background' => $model->get_value ($iter, C_BCOLOR));
+ my $bgcol = row_background_color (
+ $col, $model->get_value ($iter, C_ODDITY));
+ $renderer->set_property ('cell-background-rgba' => $bgcol);
}
);
# hotkeys column
my ($acckey, $accmod) = Gtk3::accelerator_parse ($hkey);
$renderer->set_property ('accel-key' => $acckey);
$renderer->set_property ('accel-mods' => $accmod);
- $renderer->set_property (
- 'background' => $model->get_value ($iter, C_BCOLOR));
+ my $bgcol = row_background_color (
+ $col, $model->get_value ($iter, C_ODDITY));
+ $renderer->set_property ('cell-background-rgba' => $bgcol);
}
);
# callback for saving current selection
sub new_info_page() {
my $v = get_toolkit_versions ();
- my %labels = (
- 'glib' => 'Perl-GLib',
- 'glib-r' => _('GLib runtime'),
- 'glib-b' => _('GLib built'),
- 'gtk' => 'Perl-GTK3',
- 'gtk-r' => _('GTK3 runtime'),
- 'gtk-b' => _('GTK3 built'),
- );
- # setup grids
- my $t0 = Gtk3::Grid->new;
- my $t1 = Gtk3::Grid->new;
- for ($t0, $t1) {
- $_->set_border_width (10);
- $_->set_row_spacing (10);
- $_->set_column_spacing (10);
- }
- # fill first grid
- my $row = 0;
- foreach (sort keys %$v) {
- if (defined $v->{$_}) {
- my $label = Gtk3::Label->new ($labels{$_});
- my $value = Gtk3::Label->new ('<b>' . $v->{$_} . '</b>');
- $label->set_alignment (0, 0.5);
- $value->set_alignment (0, 0.5);
- $value->set_use_markup (TRUE);
- $t0->attach ($label, 0, $row, 1, 1);
- $t0->attach ($value, 1, $row, 1, 1);
- ++$row;
- }
- }
- # fill second grid
- my @lbl = map { $_->set_alignment (0, 0.5); $_ } (
- Gtk3::Label->new (_('Binary')),
- Gtk3::Label->new (_('Configuration'))
- );
my $cfgv = $CONFIGDATA->{'Common'}{'config_version'};
$cfgv //= '';
- my @val = map { $_->set_alignment (0, 0.5); $_->set_use_markup (TRUE); $_ } (
- Gtk3::Label->new ('<b>' . $CLAWSV . '</b>'),
- Gtk3::Label->new ('<b>' . $cfgv . '</b>')
- );
- for (my $i = 0; $i <= $#lbl; ++$i) {
- $t1->attach ($lbl[$i], 0, $i, 1, 1);
- $t1->attach ($val[$i], 1, $i, 1, 1);
- }
- return new_vbox_pack (
- new_subpage_frame ($t0, _('Library versions'), 'not-packed'),
- new_subpage_frame ($t1, _('Claws Mail versions'), 'not-packed'));
+ return new_grid_pack (4, 11, [
+ [ _('Library versions') ],
+ [ new_label ('Perl-GLib'), new_title ($v->{'glib'}) ],
+ [ new_label (_('GLib runtime')), new_title ($v->{'glib-r'}) ],
+ [ new_label (_('GLib built')), new_title ($v->{'glib-b'}) ],
+ [ new_label ('Perl-GTK3'), new_title ($v->{'gtk'}) ],
+ [ new_label (_('GTK3 runtime')), new_title ($v->{'gtk-r'}) ],
+ [ new_label (_('GTK3 built')), new_title ($v->{'gtk-b'}) ],
+ [ '--' ],
+ [ _('Claws Mail versions') ],
+ [ new_label (_('Binary')), new_title ($CLAWSV) ],
+ [ new_label (_('Configuration')), new_title ($cfgv) ]
+ ]);
}
# version info
}
$versions{'gtk'} = $Gtk3::VERSION;
if ($Gtk3::VERSION >= 0.034) {
- $versions{'gtk-b'} = &Gtk3::GET_VERSION_INFO;
+ $versions{'gtk-b'} = &Gtk3::GET_VERSION_INFO
+ } else {
+ $versions{'gtk-b'} = _('Not available')
}
+ $versions{'gtk-r'} = join('.',
+ &Gtk3::get_major_version, &Gtk3::get_minor_version, &Gtk3::get_micro_version);
return \%versions;
}