~ubuntu-branches/ubuntu/saucy/vmware-view-open-client/saucy

« back to all changes in this revision

Viewing changes to gtk/helpSupportDlg.cc

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2010-06-04 17:45:04 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20100604174504-zjltuc0hdp4mv7de
Tags: 4.5.0-264434+dfsg-1
* Merging upstream version 4.5.0-264434+dfsg.
* Updating date and version header in manpage.
* Rediffing doc-pdf.patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
namespace cdk {
39
39
 
40
40
 
41
 
GtkDialog *HelpSupportDlg::sDialog = NULL;
42
 
 
43
 
 
44
 
/*
45
 
 *-----------------------------------------------------------------------------
46
 
 *
47
 
 * cdk::HelpSupportDlg::ShowDlg --
 
41
/*
 
42
 *-----------------------------------------------------------------------------
 
43
 *
 
44
 * cdk::HelpSupportDlg::HelpSupportDlg --
 
45
 *
 
46
 *      Constructor.
 
47
 *
 
48
 * Results:
 
49
 *      None
 
50
 *
 
51
 * Side effects:
 
52
 *      None
 
53
 *
 
54
 *-----------------------------------------------------------------------------
 
55
 */
 
56
 
 
57
HelpSupportDlg::HelpSupportDlg()
 
58
   : mDialog(NULL),
 
59
     mHelpTextView(NULL),
 
60
     mParent(NULL)
 
61
{
 
62
}
 
63
 
 
64
 
 
65
/*
 
66
 *-----------------------------------------------------------------------------
 
67
 *
 
68
 * cdk::HelpSupportDlg::~HelpSupportDlg --
 
69
 *
 
70
 *      Destructor.
 
71
 *
 
72
 * Results:
 
73
 *      None
 
74
 *
 
75
 * Side effects:
 
76
 *      None
 
77
 *
 
78
 *-----------------------------------------------------------------------------
 
79
 */
 
80
 
 
81
HelpSupportDlg::~HelpSupportDlg()
 
82
{
 
83
}
 
84
 
 
85
 
 
86
/*
 
87
 *-----------------------------------------------------------------------------
 
88
 *
 
89
 * cdk::HelpSupportDlg::Run --
48
90
 *
49
91
 *      Displays the help and support dialog.
50
92
 *
51
 
 *      If no HelpSupportDlg currently exists,
52
 
 *      a new one is constructed.
53
93
 *
54
94
 * Results:
55
95
 *      None
56
96
 *
57
97
 * Side effects:
58
 
 *      New window is shown or existed window is given focus.
 
98
 *      New window is shown or existing window is given focus.
59
99
 *
60
100
 *-----------------------------------------------------------------------------
61
101
 */
62
102
 
63
103
void
64
 
HelpSupportDlg::ShowDlg(GtkWindow *parent) // IN
 
104
HelpSupportDlg::Run()
65
105
{
66
 
   if (sDialog) {
67
 
      gtk_window_present(GTK_WINDOW(sDialog));
 
106
   if (mDialog) {
 
107
      InsertHelpText();
 
108
      gtk_window_present(GTK_WINDOW(mDialog));
68
109
      return;
69
110
   }
70
111
 
71
 
   sDialog = GTK_DIALOG(gtk_dialog_new_with_buttons(
72
 
                           gtk_window_get_title(parent),
73
 
                           parent, GTK_DIALOG_NO_SEPARATOR,
 
112
   mDialog = GTK_DIALOG(gtk_dialog_new_with_buttons(
 
113
                           gtk_window_get_title(mParent),
 
114
                           mParent, GTK_DIALOG_NO_SEPARATOR,
74
115
                           NULL));
75
116
 
76
 
   g_object_add_weak_pointer(G_OBJECT(sDialog), (gpointer *)&sDialog);
 
117
   g_object_add_weak_pointer(G_OBJECT(mDialog), (gpointer *)&mDialog);
77
118
   GtkButton *button = Util::CreateButton(GTK_STOCK_CLOSE);
78
 
   gtk_box_pack_start(GTK_BOX(sDialog->action_area), GTK_WIDGET(button),
 
119
   gtk_box_pack_start(GTK_BOX(mDialog->action_area), GTK_WIDGET(button),
79
120
                      false, false, 0);
80
 
   g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy),
81
 
                            sDialog);
82
 
 
83
 
   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(sDialog)->vbox),
84
 
                      CreateHelpWidget(), true, true, 0);
85
 
 
86
 
   gtk_widget_show(GTK_WIDGET(sDialog));
 
121
   g_signal_connect_swapped(button, "clicked",
 
122
                            G_CALLBACK(gtk_widget_destroy), mDialog);
 
123
 
 
124
   GtkWidget *notebook = gtk_notebook_new();
 
125
   gtk_widget_show(notebook);
 
126
   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mDialog)->vbox),
 
127
                      notebook, true, true, 0);
 
128
   gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(notebook), true);
 
129
 
 
130
   GtkLabel *label = GTK_LABEL(gtk_label_new_with_mnemonic(_("_Help")));
 
131
   gtk_misc_set_padding(GTK_MISC(label), VM_SPACING, 0);
 
132
   gtk_notebook_append_page(GTK_NOTEBOOK(notebook), CreateHelpTab(),
 
133
                            GTK_WIDGET(label));
 
134
   label = GTK_LABEL(gtk_label_new_with_mnemonic(_("_Support Information")));
 
135
   gtk_misc_set_padding(GTK_MISC(label), VM_SPACING, 0);
 
136
   gtk_notebook_append_page(GTK_NOTEBOOK(notebook), CreateSupportTab(),
 
137
                            GTK_WIDGET(label));
 
138
 
 
139
   gtk_widget_show(GTK_WIDGET(mDialog));
87
140
}
88
141
 
89
142
 
105
158
 */
106
159
 
107
160
GtkWidget *
108
 
HelpSupportDlg::CreateHelpWidget()
 
161
HelpSupportDlg::CreateHelpTab()
109
162
{
110
163
   GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
111
164
   gtk_widget_show(scrolledWindow);
117
170
   gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow),
118
171
                                       GTK_SHADOW_IN);
119
172
 
120
 
   Util::string helpText = ReadHelpFile();
121
 
 
122
 
   GtkTextView *textView = GTK_TEXT_VIEW(gtk_text_view_new());
123
 
   gtk_widget_show(GTK_WIDGET(textView));
124
 
   gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(textView));
125
 
   gtk_text_view_set_editable(textView, false);
126
 
   gtk_text_view_set_wrap_mode(textView, GTK_WRAP_WORD);
 
173
   mHelpTextView = GTK_TEXT_VIEW(gtk_text_view_new());
 
174
   gtk_widget_show(GTK_WIDGET(mHelpTextView));
 
175
   gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(mHelpTextView));
 
176
   gtk_text_view_set_editable(mHelpTextView, false);
 
177
   gtk_text_view_set_wrap_mode(mHelpTextView, GTK_WRAP_WORD);
 
178
   g_object_add_weak_pointer(G_OBJECT(mHelpTextView),
 
179
                             (gpointer *)&mHelpTextView);
 
180
 
 
181
   InsertHelpText();
 
182
 
 
183
   return scrolledWindow;
 
184
}
 
185
 
 
186
 
 
187
/*
 
188
 *-----------------------------------------------------------------------------
 
189
 *
 
190
 * cdk::HelpSupportDlg::InsertHelpText --
 
191
 *
 
192
 *      Reads in help text to mHelpTextView.
 
193
 *
 
194
 * Results:
 
195
 *      None
 
196
 *
 
197
 * Side effects:
 
198
 *      None
 
199
 *
 
200
 *-----------------------------------------------------------------------------
 
201
 */
 
202
 
 
203
void
 
204
HelpSupportDlg::InsertHelpText()
 
205
{
 
206
   ASSERT(mHelpTextView);
127
207
 
128
208
   GError *error = NULL;
129
 
   if (!gtm_set_markup(gtk_text_view_get_buffer(textView), helpText.c_str(),
130
 
                       &error)) {
 
209
   if (!gtm_set_markup(gtk_text_view_get_buffer(mHelpTextView),
 
210
                       ReadHelpFile().c_str(), &error)) {
131
211
      Warning("Error parsing help file: %s.\n", error->message);
132
212
      g_error_free(error);
133
213
   }
134
 
 
135
 
   return scrolledWindow;
136
214
}
137
215
 
138
216
 
223
301
 */
224
302
 
225
303
bool
226
 
HelpSupportDlg::GetHelpContents(const char *directory, // IN
227
 
                                const char *locale,    // IN
228
 
                                char **helpText)       // IN/OUT
 
304
HelpSupportDlg::GetHelpContents(const char *directory,       // IN
 
305
                                const char *locale,          // IN
 
306
                                char **helpText)             // IN/OUT
229
307
{
230
308
   GError *error = NULL;
231
309
 
232
 
   Util::string fileName = Util::Format("integrated_help-%s.txt", locale);
233
 
   char *file = g_build_filename(directory, fileName.c_str(), NULL);
 
310
   char *file = g_build_filename(directory, locale,
 
311
                                 (mHelpContext + ".txt").c_str(),
 
312
                                 NULL);
234
313
 
235
314
   // Attempt to read the file
236
315
   bool readSuccess = g_file_get_contents(file, helpText, NULL, &error);
237
316
   if (!readSuccess) {
238
317
      *helpText = g_markup_printf_escaped(_("An error occurred while reading "
239
 
         "the help file: %s.\n"),
240
 
         error->message);
 
318
                                            "the help file: %s.\n"),
 
319
                                          error->message);
241
320
      g_error_free(error);
242
321
      Log("%s\n", *helpText);
243
322
   }
246
325
   return readSuccess;
247
326
}
248
327
 
 
328
 
 
329
/*
 
330
 *-----------------------------------------------------------------------------
 
331
 *
 
332
 * cdk::HelpSupportDlg::CreateSupportTab --
 
333
 *
 
334
 *      Creates the widget to put into the support tab for the notebook.
 
335
 *
 
336
 *
 
337
 * Results:
 
338
 *      GtkWidget * containing support dialog contents.
 
339
 *
 
340
 * Side effects:
 
341
 *      None
 
342
 *
 
343
 *-----------------------------------------------------------------------------
 
344
 */
 
345
 
 
346
GtkWidget *
 
347
HelpSupportDlg::CreateSupportTab()
 
348
{
 
349
   GtkTable *table = GTK_TABLE(gtk_table_new(1, 3, false));
 
350
   gtk_widget_show(GTK_WIDGET(table));
 
351
   gtk_container_set_border_width(GTK_CONTAINER(table), VM_SPACING);
 
352
   gtk_table_set_row_spacings(table, VM_SPACING);
 
353
   gtk_table_set_col_spacings(table, VM_SPACING);
 
354
 
 
355
   GtkTextView *textView = GetSupportView(mSupportFile);
 
356
 
 
357
   if (textView) {
 
358
      AddTitle(table, _("Support Information"));
 
359
 
 
360
      GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
 
361
      gtk_widget_show(GTK_WIDGET(scrolledWindow));
 
362
      AddWidget(table, GTK_WIDGET(scrolledWindow));
 
363
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow),
 
364
                                     GTK_POLICY_AUTOMATIC,
 
365
                                     GTK_POLICY_ALWAYS);
 
366
      gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow),
 
367
                                          GTK_SHADOW_IN);
 
368
 
 
369
      gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(textView));
 
370
   }
 
371
 
 
372
   CreateProductInformationSection(table);
 
373
   CreateHostInformationSection(table);
 
374
   CreateConnectionInformationSection(table);
 
375
 
 
376
   return GTK_WIDGET(table);
 
377
}
 
378
 
 
379
 
 
380
/*
 
381
 *-----------------------------------------------------------------------------
 
382
 *
 
383
 * cdk::HelpSupportDlg::CreateProductInformationSection --
 
384
 *
 
385
 *      Adds the "Product Information" section to the passed in table.
 
386
 *
 
387
 * Results:
 
388
 *      None
 
389
 *
 
390
 * Side effects:
 
391
 *      None
 
392
 *
 
393
 *-----------------------------------------------------------------------------
 
394
 */
 
395
 
 
396
void
 
397
HelpSupportDlg::CreateProductInformationSection(GtkTable *table) // IN
 
398
{
 
399
   AddTitle(table, _("Product Information"));
 
400
   AddPair(table, _("Product:"), ProductState_GetName());
 
401
   AddPair(table, _("Version:"), GetVersionString());
 
402
}
 
403
 
 
404
 
 
405
/*
 
406
 *-----------------------------------------------------------------------------
 
407
 *
 
408
 * cdk::HelpSupportDlg::CreateHostInformationSection --
 
409
 *
 
410
 *      Adds the "Host Information" section to the passed in table.
 
411
 *
 
412
 * Results:
 
413
 *      None
 
414
 *
 
415
 * Side effects:
 
416
 *      None
 
417
 *
 
418
 *-----------------------------------------------------------------------------
 
419
 */
 
420
 
 
421
void
 
422
HelpSupportDlg::CreateHostInformationSection(GtkTable *table) // IN
 
423
{
 
424
   AddTitle(table, _("Host Information"));
 
425
   AddPair(table, _("Host Name:"), Util::GetClientHostName());
 
426
   if (ShowLogLocation()) {
 
427
      AddPair(table, _("Log File:"), Log_GetFileName());
 
428
   }
 
429
}
 
430
 
 
431
 
 
432
/*
 
433
 *-----------------------------------------------------------------------------
 
434
 *
 
435
 * cdk::HelpSupportDlg::CreateConnectionInformationSection --
 
436
 *
 
437
 *      Adds the "Connection Information" section to the passed in table.
 
438
 *
 
439
 * Results:
 
440
 *      None
 
441
 *
 
442
 * Side effects:
 
443
 *      None
 
444
 *
 
445
 *-----------------------------------------------------------------------------
 
446
 */
 
447
 
 
448
void
 
449
HelpSupportDlg::CreateConnectionInformationSection(GtkTable *table) // IN
 
450
{
 
451
   AddTitle(table, _("Connection Information"));
 
452
   AddPair(table, _("VMware View Server:"), mBrokerHostName);
 
453
}
 
454
 
 
455
 
 
456
/*
 
457
 *-----------------------------------------------------------------------------
 
458
 *
 
459
 * cdk::HelpSupportDlg::CreateLabel --
 
460
 *
 
461
 *      Creates a left aligned, selectable label with the given text.
 
462
 *      gtk_widget_show is called on the new label before it is returned.
 
463
 *
 
464
 * Results:
 
465
 *      A GtkLabel
 
466
 *
 
467
 * Side effects:
 
468
 *      None
 
469
 *
 
470
 *-----------------------------------------------------------------------------
 
471
 */
 
472
 
 
473
GtkLabel *
 
474
HelpSupportDlg::CreateLabel(const Util::string &text) // IN
 
475
{
 
476
   GtkLabel *l = GTK_LABEL(gtk_label_new(text.c_str()));
 
477
   gtk_widget_show(GTK_WIDGET(l));
 
478
   gtk_misc_set_alignment(GTK_MISC(l), 0, 0);
 
479
   gtk_label_set_selectable(l, true);
 
480
 
 
481
   return l;
 
482
}
 
483
 
 
484
 
 
485
/*
 
486
 *-----------------------------------------------------------------------------
 
487
 *
 
488
 * cdk::HelpSupportDlg::AppendRow --
 
489
 *
 
490
 *      Append a new row to table and return new row number.
 
491
 *
 
492
 * Results:
 
493
 *      The index of the newly added row.
 
494
 *
 
495
 * Side effects:
 
496
 *      A row is added to the table
 
497
 *
 
498
 *-----------------------------------------------------------------------------
 
499
 */
 
500
 
 
501
guint
 
502
HelpSupportDlg::AppendRow(GtkTable *table) // IN
 
503
{
 
504
   guint rows;
 
505
   guint columns;
 
506
   g_object_get(table, "n-rows", &rows, "n-columns", &columns, NULL);
 
507
   gtk_table_resize(table, rows + 1, columns);
 
508
   return rows;
 
509
}
 
510
 
 
511
 
 
512
/*
 
513
 *-----------------------------------------------------------------------------
 
514
 *
 
515
 * cdk::HelpSupportDlg::AddTitle --
 
516
 *
 
517
 *      Add a label with bold text into the table.
 
518
 *
 
519
 * Results:
 
520
 *      None
 
521
 *
 
522
 * Side effects:
 
523
 *      None
 
524
 *
 
525
 *-----------------------------------------------------------------------------
 
526
 */
 
527
 
 
528
void
 
529
HelpSupportDlg::AddTitle(GtkTable *table,          // IN
 
530
                         const Util::string &text) // IN
 
531
{
 
532
   guint row = AppendRow(table);
 
533
 
 
534
   GtkLabel *l = CreateLabel("");
 
535
   gtk_table_attach_defaults(table, GTK_WIDGET(l), 0, 3, row, row + 1);
 
536
   gtk_label_set_markup(l, Util::Format("<b>%s</b>", text.c_str()).c_str());
 
537
}
 
538
 
 
539
 
 
540
/*
 
541
 *-----------------------------------------------------------------------------
 
542
 *
 
543
 * cdk::HelpSupportDlg::AddPair --
 
544
 *
 
545
 *      Appends two labels to the table: one is a label, the second is data.
 
546
 *
 
547
 * Results:
 
548
 *      None
 
549
 *
 
550
 * Side effects:
 
551
 *      None
 
552
 *
 
553
 *-----------------------------------------------------------------------------
 
554
 */
 
555
 
 
556
void
 
557
HelpSupportDlg::AddPair(GtkTable *table,           // IN
 
558
                        const Util::string &label, // IN
 
559
                        const Util::string &data)  // IN
 
560
{
 
561
   guint row = AppendRow(table);
 
562
 
 
563
   GtkLabel *l = CreateLabel(label);
 
564
   gtk_table_attach_defaults(table, GTK_WIDGET(l), 1, 2, row, row + 1);
 
565
   l = CreateLabel(data);
 
566
   gtk_table_attach_defaults(table, GTK_WIDGET(l), 2, 3, row, row + 1);
 
567
}
 
568
 
 
569
 
 
570
/*
 
571
 *-----------------------------------------------------------------------------
 
572
 *
 
573
 * cdk::HelpSupportDlg::AddWidget --
 
574
 *
 
575
 *      Appends the given widget to the table.  It will span the 2nd and 3rd
 
576
 *      columns.
 
577
 *
 
578
 * Results:
 
579
 *      None
 
580
 *
 
581
 * Side effects:
 
582
 *      None
 
583
 *
 
584
 *-----------------------------------------------------------------------------
 
585
 */
 
586
 
 
587
void
 
588
HelpSupportDlg::AddWidget(GtkTable *table,   // IN
 
589
                          GtkWidget *widget) // IN
 
590
{
 
591
   guint row = AppendRow(table);
 
592
 
 
593
   gtk_table_attach_defaults(table, widget, 1, 3, row, row + 1);
 
594
}
 
595
 
 
596
 
 
597
/*
 
598
 *-----------------------------------------------------------------------------
 
599
 *
 
600
 * cdk::HelpSupportDlg::GetSupportView --
 
601
 *
 
602
 *      Read in the contents of the passed in file and return a
 
603
 *      GtkTextView with the contents of the file.
 
604
 *
 
605
 * Results:
 
606
 *      GtkTextView *
 
607
 *
 
608
 * Side effects:
 
609
 *      None
 
610
 *
 
611
 *-----------------------------------------------------------------------------
 
612
 */
 
613
 
 
614
GtkTextView *
 
615
HelpSupportDlg::GetSupportView(const Util::string &filePath) // IN
 
616
{
 
617
   GError *error = NULL;
 
618
   char *supportText = NULL;
 
619
 
 
620
   if (!g_file_get_contents(filePath.c_str(), &supportText, NULL, &error)) {
 
621
      Log(_("An error occurred while reading the support file: %s.\n"),
 
622
          error->message);
 
623
      g_error_free(error);
 
624
      return NULL;
 
625
   }
 
626
 
 
627
   GtkTextView *textView = GTK_TEXT_VIEW(gtk_text_view_new());
 
628
   gtk_widget_show(GTK_WIDGET(textView));
 
629
   gtk_text_view_set_editable(textView, false);
 
630
   gtk_text_view_set_wrap_mode(textView, GTK_WRAP_WORD);
 
631
 
 
632
   gtk_text_buffer_set_text(gtk_text_view_get_buffer(textView),
 
633
                            supportText, -1);
 
634
   g_free(supportText);
 
635
   return textView;
 
636
}
 
637
 
 
638
 
249
639
} // namespace cdk