File: export_callback.C

package info (click to toggle)
peruser 4b33-10
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,944 kB
  • ctags: 1,064
  • sloc: cpp: 22,397; perl: 2,733; makefile: 345; sh: 335
file content (103 lines) | stat: -rw-r--r-- 2,630 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
102
103
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "npfile.h"
#include "nptext.h"

void export_buttons_callback( GtkWidget *widget, gpointer data )
{
   GtkWidget *fs = ( GtkWidget *)gtk_object_get_data( GTK_OBJECT( widget ),
                                                      "fs" );

   if ( !( int)data )
   {
      gtk_widget_destroy( fs );
      return;
   }

   NP_Text *text = ( NP_Text *)data;

   char *filename =
      gtk_file_selection_get_filename( GTK_FILE_SELECTION( fs ));

   if ( filename == NULL || *filename == '\0' )
      return;

   NP_File file;
   char buffer[ 1024 ];
   if ( file.openw( filename ))
   {
      snprintf( buffer, sizeof buffer, file.get_error());
      text->show_message( buffer );

      while( text->message_window != NULL )
         while( gtk_events_pending() )
            gtk_main_iteration();
      
      return;
   }

   char *pointer = text->text;
   if ( *pointer == '@' )
      pointer += strcspn( pointer, "\n" ) + 1;

   while( *pointer )
   {
      int idx = strcspn( pointer, "\r" );
      pointer[ idx ] = '\n';
      pointer[ ++idx ] = '\0';

      if ( file.put_string( pointer ))
      {
         file.print_error();
         return;
      }

      pointer += idx + 1;
   }

   file.close();

   snprintf( buffer, sizeof buffer, "Message text succesfully saved as %s.",
             filename );
   text->show_message( buffer );

   while( text->message_window != NULL )
      while( gtk_events_pending() )
         gtk_main_iteration();
   
   gtk_widget_destroy( fs );
   
   return;
}

void export_callback( GtkWidget *widget, gpointer data )
{
   NP_Text *text = ( NP_Text *)data;

   if ( text->offset == -1 )
   {
      text->show_message( "There is no message currently loaded." );
      return;
   }

   GtkWidget *fs = gtk_file_selection_new( "Enter Filename" );
   gtk_file_selection_set_filename( GTK_FILE_SELECTION( fs ), "export.txt" );
   gtk_object_set_data( GTK_OBJECT( GTK_FILE_SELECTION( fs )->ok_button ),
                        "fs", fs );
   gtk_object_set_data( GTK_OBJECT( GTK_FILE_SELECTION( fs )->cancel_button ),
                        "fs", fs );
                        
   gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( fs )->ok_button ),
                       "clicked",
                       GTK_SIGNAL_FUNC( export_buttons_callback ), text );
   gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( fs )->cancel_button ),
                       "clicked",
                       GTK_SIGNAL_FUNC( export_buttons_callback ),
                       ( gpointer )0 );

   gtk_widget_show( fs );   

   return;
}