File: init_newsgroups.C

package info (click to toggle)
peruser 4b33-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 2,952 kB
  • ctags: 1,064
  • sloc: cpp: 22,367; perl: 2,733; makefile: 345; sh: 335
file content (101 lines) | stat: -rw-r--r-- 3,228 bytes parent folder | download | duplicates (2)
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
#include "npconfig.h"

void NP_Config::init_newsgroups( GtkWidget *frame )
{
   // table
   
   GtkWidget *table = gtk_table_new( 10, 10, FALSE );
   gtk_widget_show( table );
   gtk_table_set_col_spacings( GTK_TABLE( table ), 10 );
   gtk_container_border_width( GTK_CONTAINER( table ), 10 );
   gtk_container_add( GTK_CONTAINER( frame ), table );

   // pane

   GtkWidget *pane = gtk_hpaned_new();
   gtk_widget_show( pane );
   gtk_table_attach_defaults( GTK_TABLE( table ), pane, 0, 10, 0, 9 );

   // scroll

   GtkWidget *scroll = gtk_scrolled_window_new( NULL, NULL );
   gtk_widget_show( scroll );
   gtk_widget_set_usize( scroll, 150, 175 );
   gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scroll ),
                                   GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_AUTOMATIC );
   gtk_paned_add1( GTK_PANED( pane ), scroll );
   
   // vbox
   
   server_buttons_vbox = gtk_vbox_new( FALSE, 0 );
   gtk_widget_show( server_buttons_vbox );
   gtk_object_set_data( GTK_OBJECT( server_buttons_vbox ), "config", this );
   gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scroll ), 
                                          server_buttons_vbox );
   
   int total = subscription.get_total();

   // radio buttons

   const char *first_address = NULL;

   if ( total )
   {
      if (( server_buttons =
            ( GtkWidget **)calloc( total, sizeof *server_buttons )) == NULL )
      {
         perror( "calloc" );
         exit( 1 );
      }

      for( int i = 0; i < total; ++i )
      {
         const char *address = subscription[ i ];
         if ( address == NULL )
         {
            subscription.print_error();
            return;
         }

         if ( !i ) first_address = address;
      
         create_server_button( i, address );
      }
   }
   
   // clist
   
   GtkWidget *group_scroll = gtk_scrolled_window_new( NULL, NULL );
   gtk_widget_show( group_scroll );

   static char *titles[] = { "Subscribed Groups", "Last Article Number Seen" };
   group_clist = gtk_clist_new_with_titles( 2, titles );
   gtk_widget_show( group_clist );
   gtk_clist_set_selection_mode( GTK_CLIST( group_clist ),
                                 GTK_SELECTION_EXTENDED );
   gtk_clist_set_column_width( GTK_CLIST( group_clist ), 0, 200 );
   gtk_object_set_data( GTK_OBJECT( server_buttons_vbox ), "clist",
                        group_clist );
   gtk_container_add( GTK_CONTAINER( group_scroll ), group_clist );
   gtk_paned_add2( GTK_PANED( pane ), group_scroll );

   // edit_button

   GtkWidget *toolbar = gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL,
                                         GTK_TOOLBAR_TEXT );
   gtk_widget_show( toolbar );
   gtk_toolbar_append_item( GTK_TOOLBAR( toolbar ), " Edit Newsgroups ",
                            "Add or remove newsgroups from the list of "
                            "subscribed groups.", NULL, NULL,
                            GTK_SIGNAL_FUNC( edit_button_callback ), this );
   
   gtk_table_attach_defaults( GTK_TABLE( table ), toolbar, 5, 10, 9, 10 );

   if ( total )
      address_buttons_callback( first_button, ( char *)first_address );
   else
      current_server = -1;
   
   return;
}