home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / PaperLayout.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  9KB  |  285 lines

  1. #include <config.h>
  2.  
  3. #include <stdlib.h>
  4.  
  5. #include "definitions.h"
  6. #include FORMS_H_LOCATION
  7. #include "layout_forms.h"
  8. #include "lyx_main.h"
  9. #include "lyxrc.h"
  10. #include "LString.h"
  11. #include "filetools.h"
  12. #include "buffer.h"
  13. #include "minibuffer.h"
  14. #include "vspace.h"
  15. #include "lyx_gui_misc.h"
  16. #include "BufferView.h"
  17. #include "gettext.h"
  18.  
  19. //     $Id: PaperLayout.C,v 1.1.1.1 1998/04/23 16:02:47 larsbj Exp $    
  20.  
  21. #if !defined(lint) && !defined(WITH_WARNINGS)
  22. static char vcid[] = "$Id: PaperLayout.C,v 1.1.1.1 1998/04/23 16:02:47 larsbj Exp $";
  23. #endif /* lint */
  24.  
  25. /* Prototypes */
  26. extern FD_form_paper *fd_form_paper;
  27. extern MiniBuffer *minibuffer;
  28. extern BufferView *current_view;
  29.  
  30.  
  31. inline void DeactivatePaperButtons ()
  32. {
  33.     fl_deactivate_object (fd_form_paper->button_ok);
  34.     fl_deactivate_object (fd_form_paper->button_apply);
  35.     fl_set_object_lcol (fd_form_paper->button_ok, FL_INACTIVE);
  36.     fl_set_object_lcol (fd_form_paper->button_apply, FL_INACTIVE);
  37. }
  38.  
  39.  
  40. inline void ActivatePaperButtons ()
  41. {
  42.     fl_activate_object (fd_form_paper->button_ok);
  43.     fl_activate_object (fd_form_paper->button_apply);
  44.     fl_set_object_lcol (fd_form_paper->button_ok, FL_BLACK);
  45.     fl_set_object_lcol (fd_form_paper->button_apply, FL_BLACK);
  46. }
  47.  
  48.  
  49. inline void DisablePaperLayout()
  50. {
  51.         DeactivatePaperButtons();
  52.         fl_deactivate_object (fd_form_paper->choice_paperpackage);
  53.     fl_deactivate_object (fd_form_paper->greoup_radio_orientation);
  54.     fl_deactivate_object (fd_form_paper->radio_portrait);
  55.     fl_deactivate_object (fd_form_paper->radio_landscape);
  56.     fl_deactivate_object (fd_form_paper->choice_papersize2);
  57.     fl_deactivate_object (fd_form_paper->push_use_geometry);
  58.     fl_deactivate_object (fd_form_paper->input_custom_width);
  59.     fl_deactivate_object (fd_form_paper->input_custom_height);
  60.     fl_deactivate_object (fd_form_paper->input_top_margin);
  61.     fl_deactivate_object (fd_form_paper->input_bottom_margin);
  62.     fl_deactivate_object (fd_form_paper->input_left_margin);
  63.     fl_deactivate_object (fd_form_paper->input_right_margin);
  64.     fl_deactivate_object (fd_form_paper->input_head_height);
  65.     fl_deactivate_object (fd_form_paper->input_head_sep);
  66.     fl_deactivate_object (fd_form_paper->input_foot_skip);
  67.     fl_deactivate_object (fd_form_paper->text_warning);
  68. }
  69.  
  70.  
  71. inline void EnablePaperLayout()
  72. {
  73.         ActivatePaperButtons();
  74.         fl_activate_object (fd_form_paper->choice_paperpackage);
  75.     fl_activate_object (fd_form_paper->greoup_radio_orientation);
  76.     fl_activate_object (fd_form_paper->radio_portrait);
  77.     fl_activate_object (fd_form_paper->radio_landscape);
  78.     fl_activate_object (fd_form_paper->choice_papersize2);
  79.     fl_activate_object (fd_form_paper->push_use_geometry);
  80.     fl_activate_object (fd_form_paper->input_custom_width);
  81.     fl_activate_object (fd_form_paper->input_custom_height);
  82.     fl_activate_object (fd_form_paper->input_top_margin);
  83.     fl_activate_object (fd_form_paper->input_bottom_margin);
  84.     fl_activate_object (fd_form_paper->input_left_margin);
  85.     fl_activate_object (fd_form_paper->input_right_margin);
  86.     fl_activate_object (fd_form_paper->input_head_height);
  87.     fl_activate_object (fd_form_paper->input_head_sep);
  88.     fl_activate_object (fd_form_paper->input_foot_skip);
  89.     fl_activate_object (fd_form_paper->text_warning);
  90. }
  91.  
  92.  
  93. static void checkMarginValues()
  94. {
  95.     int allEmpty;
  96.     
  97.     fl_hide_object(fd_form_paper->text_warning);
  98.     ActivatePaperButtons();
  99. #if 0
  100.     val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
  101.     if (val == VM_PAPER_DEFAULT)
  102.         return;
  103. #endif
  104.     allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
  105.             !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
  106.             !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
  107.             !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
  108.             !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
  109.             !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
  110.             !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
  111.             !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
  112.             !strlen(fl_get_input(fd_form_paper->input_custom_height)));
  113.     if (!allEmpty) {
  114.         fl_set_button(fd_form_paper->push_use_geometry, 1);
  115.     }
  116. }
  117.  
  118.  
  119. bool UpdateLayoutPaper()
  120. {
  121.     bool update = true;
  122.     if (!current_view->available())
  123.         update = false;
  124.  
  125.     if (update) {
  126.         BufferParams * params = ¤t_view->currentBuffer()->params;
  127.  
  128.         fl_set_choice(fd_form_paper->choice_papersize2,
  129.                   params->papersize2 + 1);
  130.         fl_set_choice(fd_form_paper->choice_paperpackage,
  131.                   params->paperpackage + 1);
  132.         fl_set_button(fd_form_paper->push_use_geometry,
  133.                   params->use_geometry);
  134.         fl_set_button(fd_form_paper->radio_portrait, 0);
  135.         fl_set_button(fd_form_paper->radio_landscape, 0);
  136.         if (params->orientation == ORIENTATION_LANDSCAPE)
  137.             fl_set_button(fd_form_paper->radio_landscape, 1);
  138.         else
  139.             fl_set_button(fd_form_paper->radio_portrait, 1);
  140.    
  141.         fl_set_input(fd_form_paper->input_custom_width,
  142.                  params->paperwidth.c_str());
  143.         fl_set_input(fd_form_paper->input_custom_height,
  144.                  params->paperheight.c_str());
  145.         fl_set_input(fd_form_paper->input_left_margin,
  146.                  params->leftmargin.c_str());
  147.         fl_set_input(fd_form_paper->input_top_margin,
  148.                  params->topmargin.c_str());
  149.         fl_set_input(fd_form_paper->input_right_margin,
  150.                  params->rightmargin.c_str());
  151.         fl_set_input(fd_form_paper->input_bottom_margin,
  152.                  params->bottommargin.c_str());
  153.         fl_set_input(fd_form_paper->input_head_height,
  154.                  params->headheight.c_str());
  155.         fl_set_input(fd_form_paper->input_head_sep,
  156.                  params->headsep.c_str());
  157.         fl_set_input(fd_form_paper->input_foot_skip,
  158.                  params->footskip.c_str());
  159.         fl_set_focus_object(fd_form_paper->form_paper,
  160.                     fd_form_paper->choice_papersize2);
  161.         fl_hide_object(fd_form_paper->text_warning);
  162.         if (current_view->currentBuffer()->isReadonly()) {
  163.             DisablePaperLayout();
  164.             fl_set_object_label(fd_form_paper->text_warning,
  165.                         _("Document is read-only."
  166.                           "  No changes to layout"
  167.                           " permitted."));
  168.             fl_show_object(fd_form_paper->text_warning);
  169.         } else
  170.             EnablePaperLayout();
  171.     } else if (fd_form_paper->form_paper->visible) {
  172.         fl_hide_form(fd_form_paper->form_paper);
  173.     }
  174.     return update;
  175. }
  176.  
  177.  
  178. void MenuLayoutPaper()
  179. {
  180.     if (UpdateLayoutPaper()) {
  181.         if (fd_form_paper->form_paper->visible) {
  182.             fl_raise_form(fd_form_paper->form_paper);
  183.         } else {
  184.             fl_show_form(fd_form_paper->form_paper,
  185.                      FL_PLACE_MOUSE
  186.                      | FL_FREE_SIZE,FL_FULLBORDER,
  187.                      _("Paper Layout"));
  188.         }
  189.     }
  190. }
  191.  
  192.  
  193. void PaperApplyCB(FL_OBJECT *, long)
  194. {
  195.     if (! current_view->available()) 
  196.         return;
  197.     
  198.     BufferParams *params = ¤t_view->currentBuffer()->params;
  199.     
  200.     const FD_form_paper* fd = fd_form_paper;
  201.     
  202.     params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
  203.     params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
  204.     params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
  205.     if (fl_get_button(fd_form_paper->radio_landscape))
  206.         params->orientation = ORIENTATION_LANDSCAPE;
  207.     else
  208.         params->orientation = ORIENTATION_PORTRAIT;
  209.     params->paperwidth = fl_get_input(fd->input_custom_width);
  210.     params->paperheight = fl_get_input(fd->input_custom_height);
  211.     params->leftmargin = fl_get_input(fd->input_left_margin);
  212.     params->topmargin = fl_get_input(fd->input_top_margin);
  213.     params->rightmargin = fl_get_input(fd->input_right_margin);
  214.     params->bottommargin = fl_get_input(fd->input_bottom_margin);
  215.     params->headheight = fl_get_input(fd->input_head_height);
  216.     params->headsep = fl_get_input(fd->input_head_sep);
  217.     params->footskip = fl_get_input(fd->input_foot_skip);
  218.     current_view->currentBuffer()->setPaperStuff();
  219.     minibuffer->Set(_("Paper layout set"));
  220.     current_view->currentBuffer()->markDirty();
  221.     
  222.     return;
  223. }
  224.  
  225.  
  226. void PaperCancelCB(FL_OBJECT *, long)
  227. {
  228.     fl_hide_form(fd_form_paper->form_paper);
  229. }
  230.  
  231.  
  232. void PaperOKCB(FL_OBJECT *ob, long data)
  233. {
  234.     PaperCancelCB(ob,data);
  235.     PaperApplyCB(ob,data);
  236. }
  237.  
  238.  
  239. void PaperMarginsCB(FL_OBJECT *ob, long)
  240. {
  241.     const FD_form_paper
  242.         *fd = fd_form_paper;
  243.     LString
  244.         str;
  245.     char
  246.         val;
  247.     
  248.     checkMarginValues();
  249.     if (ob == fd->choice_papersize2) {
  250.         val = fl_get_choice(fd->choice_papersize2)-1;
  251.         if (val == VM_PAPER_DEFAULT) {
  252.             fl_set_button(fd->push_use_geometry, 0);
  253.             checkMarginValues();
  254.         } else {
  255.             if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
  256.                 (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
  257.                 (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
  258.                 fl_set_button(fd->push_use_geometry, 1);
  259.             }
  260.             fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
  261.         }
  262.     } else if (ob == fd->choice_paperpackage) {
  263.         val = fl_get_choice(fd->choice_paperpackage)-1;
  264.         if (val != PACKAGE_NONE) {
  265.             fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
  266.             fl_set_button(fd->push_use_geometry, 0);
  267.         }
  268.     } else if ((ob==fd->input_custom_width) || (ob==fd->input_custom_height) ||
  269.            (ob==fd->input_left_margin) || (ob==fd->input_right_margin) ||
  270.            (ob==fd->input_top_margin) || (ob==fd->input_bottom_margin) ||
  271.            (ob==fd->input_head_height) || (ob==fd->input_head_sep) ||
  272.            (ob==fd->input_foot_skip)) {
  273.         str = fl_get_input(ob);
  274.         if (!str.empty() && !isValidLength(str)) {
  275.             fl_set_object_label(fd_form_paper->text_warning,
  276.                         _("Warning: Invalid Length"
  277.                           " (valid example: 10mm)"));
  278.             fl_show_object(fd_form_paper->text_warning);
  279.             DeactivatePaperButtons();
  280.         } else if (!str.empty())
  281.             fl_set_button(fd->push_use_geometry, 1);
  282.     }
  283.     return;
  284. }
  285.