Hello,

here is my first try of a patch.

The two patches add the ability of the qt-frontend to automatically
store and retrieve the mainwindow position (x,y,width,height) in/from
the lyx preferences file.

- preferences.diff
  Adds 5 new settings to lyx preferences file:
  geometry_xysaved (bool)
  geometry_xpos    (int)
  geometry_ypos    (int)
  geometry_width   (int)
  geometry_height  (int)

- qt.diff
  modifies start() to get the width, height, x, y settings from the
  preferences.
  If no settings are stored - e.g. first run or update from older
  version - use the default width, height and let the qt toolkit
  decide where to position the new window.

  modifies exit() to get the acutal mainwindow geometry and store
  them in the lyx preferences files.

Ok?

     cu
        Armin

===============================================================
http://www.ahammer.ch  -------------- PGP public key on request
Index: src/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/ChangeLog,v
retrieving revision 1.2182
diff -u -r1.2182 ChangeLog
--- src/ChangeLog       2005/05/12 12:22:35     1.2182
+++ src/ChangeLog       2005/05/29 09:21:36
@@ -1,3 +1,9 @@
+2005-05-28  Armin Hammer       <[EMAIL PROTECTED]>
+
+       * lyxfunc.C, lyxrc.[hC]: added geometry_xpos, geometry_ypos,
+         geometry_xysaved, geometry_width, geometry_height to store
+         the main window geometry in the preferences file
+
 2005-05-12  Martin Vermeer  <[EMAIL PROTECTED]>
 
        * tabular.[hC]: added setCellInset to fix tabular paste.
Index: src/lyxfunc.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxfunc.C,v
retrieving revision 1.657
diff -u -r1.657 lyxfunc.C
--- src/lyxfunc.C       2005/05/06 20:00:30     1.657
+++ src/lyxfunc.C       2005/05/29 09:21:39
@@ -1973,6 +1973,11 @@
        case LyXRC::RC_SCREEN_FONT_SIZES:
        case LyXRC::RC_SCREEN_FONT_TYPEWRITER:
        case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
+       case LyXRC::RC_SCREEN_GEOMETRY_HEIGHT:
+       case LyXRC::RC_SCREEN_GEOMETRY_WIDTH:
+       case LyXRC::RC_SCREEN_GEOMETRY_XPOS:
+       case LyXRC::RC_SCREEN_GEOMETRY_XYSAVED: 
+       case LyXRC::RC_SCREEN_GEOMETRY_YPOS:
        case LyXRC::RC_SCREEN_ZOOM:
        case LyXRC::RC_SERVERPIPE:
        case LyXRC::RC_SET_COLOR:
Index: src/lyxrc.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxrc.C,v
retrieving revision 1.189
diff -u -r1.189 lyxrc.C
--- src/lyxrc.C 2005/04/26 11:12:10     1.189
+++ src/lyxrc.C 2005/05/29 09:21:41
@@ -148,6 +148,11 @@
        { "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES },
        { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
        { "\\screen_font_typewriter_foundry", 
LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
+       { "\\screen_geometry_height", LyXRC::RC_SCREEN_GEOMETRY_HEIGHT },       
+       { "\\screen_geometry_width", LyXRC::RC_SCREEN_GEOMETRY_WIDTH }, 
+       { "\\screen_geometry_xpos", LyXRC::RC_SCREEN_GEOMETRY_XPOS },
+       { "\\screen_geometry_xysaved", LyXRC::RC_SCREEN_GEOMETRY_XYSAVED },     
+       { "\\screen_geometry_ypos", LyXRC::RC_SCREEN_GEOMETRY_YPOS },           
        { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
        { "\\serverpipe", LyXRC::RC_SERVERPIPE },
        { "\\set_color", LyXRC::RC_SET_COLOR },
@@ -281,6 +286,12 @@
        user_name = lyx::support::user_name();
 
        user_email = lyx::support::user_email();
+       
+       geometry_xysaved = false;
+       geometry_xpos = -1;
+       geometry_ypos = -1;
+       geometry_width = 690;
+       geometry_height = 510;  
 }
 
 
@@ -775,6 +786,36 @@
                        }
                        break;
 
+               case RC_SCREEN_GEOMETRY_HEIGHT:
+                       if (lexrc.next()) {
+                               geometry_height = lexrc.getInteger();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_WIDTH:
+                       if (lexrc.next()) {
+                               geometry_width = lexrc.getInteger();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_XPOS:
+                       if (lexrc.next()) {
+                               geometry_xpos = lexrc.getInteger();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_XYSAVED:
+                       if (lexrc.next()) {
+                               geometry_xysaved = lexrc.getBool();
+                       }
+                       break;
+
+               case RC_SCREEN_GEOMETRY_YPOS:
+                       if (lexrc.next()) {
+                               geometry_ypos = lexrc.getInteger();
+                       }
+                       break;
+
                case RC_POPUP_BOLD_FONT:
                        if (lexrc.next()) {
                                popup_bold_font = lexrc.getString();
@@ -1549,6 +1590,37 @@
                           << '\n';
                }
 
+       case RC_SCREEN_GEOMETRY_HEIGHT:
+               if (ignore_system_lyxrc ||
+                   geometry_height != system_lyxrc.geometry_height) {
+                       os << "\\screen_geometry_height " << geometry_height
+                          << '\n';
+               }
+       case RC_SCREEN_GEOMETRY_WIDTH:
+               if (ignore_system_lyxrc ||
+                   geometry_width != system_lyxrc.geometry_width) {
+                       os << "\\screen_geometry_width " << geometry_width
+                          << '\n';
+               }               
+       case RC_SCREEN_GEOMETRY_XYSAVED:
+               if (ignore_system_lyxrc ||
+                   geometry_xysaved != system_lyxrc.geometry_xysaved) {
+                       os << "\\screen_geometry_xysaved " << 
convert<string>(geometry_xysaved)
+                          << '\n';
+               }               
+       case RC_SCREEN_GEOMETRY_XPOS:
+               if (ignore_system_lyxrc ||
+                   geometry_xpos != system_lyxrc.geometry_xpos) {
+                       os << "\\screen_geometry_xpos " << geometry_xpos
+                          << '\n';
+               }
+       case RC_SCREEN_GEOMETRY_YPOS:
+               if (ignore_system_lyxrc ||
+                   geometry_ypos != system_lyxrc.geometry_ypos) {
+                       os << "\\screen_geometry_ypos " << geometry_ypos
+                          << '\n';
+               }
+
                os << "\n#\n"
                   << "# COLOR SECTION ###################################\n"
                   << "#\n\n";
@@ -2353,6 +2425,14 @@
 
        case RC_SCREEN_FONT_SIZES:
                str = _("The font sizes used for calculating the scaling of the 
screen fonts.");
+               break;
+
+       case RC_SCREEN_GEOMETRY_HEIGHT:
+       case RC_SCREEN_GEOMETRY_WIDTH:
+       case RC_SCREEN_GEOMETRY_XYSAVED:        
+       case RC_SCREEN_GEOMETRY_XPOS:
+       case RC_SCREEN_GEOMETRY_YPOS:
+           str = _("Specify geometry of the main view in width x height and if 
flag enabled also + xpos + ypos.");
                break;
 
        case RC_SCREEN_ZOOM:
Index: src/lyxrc.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxrc.h,v
retrieving revision 1.93
diff -u -r1.93 lyxrc.h
--- src/lyxrc.h 2005/03/25 15:27:29     1.93
+++ src/lyxrc.h 2005/05/29 09:21:42
@@ -115,7 +115,12 @@
                RC_SCREEN_FONT_SCALABLE,
                RC_SCREEN_FONT_SIZES,
                RC_SCREEN_FONT_TYPEWRITER,
-               RC_SCREEN_FONT_TYPEWRITER_FOUNDRY,
+               RC_SCREEN_FONT_TYPEWRITER_FOUNDRY,              
+               RC_SCREEN_GEOMETRY_HEIGHT,
+               RC_SCREEN_GEOMETRY_WIDTH,
+               RC_SCREEN_GEOMETRY_XPOS,
+               RC_SCREEN_GEOMETRY_XYSAVED,             
+               RC_SCREEN_GEOMETRY_YPOS,                
                RC_SCREEN_ZOOM,
                RC_SERVERPIPE,
                RC_SET_COLOR,
@@ -384,6 +389,16 @@
         *  The string is input, stored and output in native format.
         */
        std::string path_prefix;
+       /// True if xpos/ypos are specified in preferences
+       bool geometry_xysaved;
+       /// XPosition of MainWindow
+       int geometry_xpos;
+       /// YPosition of MainWindow
+       int geometry_ypos;
+       /// Width of MainWindow
+       int geometry_width;
+       /// Height of MainWindow
+       int geometry_height;
 };
 
 
Index: src/frontends/qt2/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ChangeLog,v
retrieving revision 1.779
diff -u -r1.779 ChangeLog
--- src/frontends/qt2/ChangeLog 2005/05/13 08:33:01     1.779
+++ src/frontends/qt2/ChangeLog 2005/05/29 09:21:51
@@ -1,3 +1,8 @@
+2005-05-28     Armin Hammer     <[EMAIL PROTECTED]>
+
+       lyx_gui.C: added window size restore from preference file
+       in start() and window size save code in exit()
+
 2005-05-09  Michael Schmitt  <[EMAIL PROTECTED]>
 
        * *.C: strip "LyX: " prefix from dialog titles; harmonize
Index: src/frontends/qt2/lyx_gui.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/lyx_gui.C,v
retrieving revision 1.83
diff -u -r1.83 lyx_gui.C
--- src/frontends/qt2/lyx_gui.C 2005/05/13 08:33:01     1.83
+++ src/frontends/qt2/lyx_gui.C 2005/05/29 09:21:51
@@ -27,6 +27,7 @@
 
 #include "graphics/LoaderQueue.h"
 
+#include "support/path.h"
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/package.h"
@@ -60,6 +61,7 @@
 
 using lyx::support::ltrim;
 using lyx::support::package;
+using lyx::support::Path;
 
 using lyx::frontend::QtView;
 
@@ -219,13 +221,12 @@
 
 void start(string const & batch, vector<string> const & files)
 {
-       // initial geometry
-       unsigned int width = 690;
-       unsigned int height = 510;
-
-       boost::shared_ptr<QtView> view_ptr(new QtView(width, height));
+       boost::shared_ptr<QtView> view_ptr(new QtView(lyxrc.geometry_width, 
lyxrc.geometry_height));
        LyX::ref().addLyXView(view_ptr);
 
+    if ( lyxrc.geometry_xysaved) 
+      view_ptr->move( lyxrc.geometry_xpos, lyxrc.geometry_ypos);
+
        QtView & view = *view_ptr.get();
        view.show();
        view.init();
@@ -267,6 +268,17 @@
 
 void exit()
 {
+       QWidget * view = qApp->mainWidget(); 
+
+       lyxrc.geometry_xysaved = true;
+       lyxrc.geometry_height = view->height();
+       lyxrc.geometry_width = view->width();
+    lyxrc.geometry_xpos = view->x();
+       lyxrc.geometry_ypos = view->y();
+       
+       Path p(package().user_support());
+    lyxrc.write("preferences", false);
+
        delete lyxsocket;
        delete lyxserver;
        lyxserver = 0;

Reply via email to