Hi Bo,

i've hacked the get/set function for the qt frontend on macosx some time
ago. Perhaps you can clean it up.

lyx_gui.diff : qt frontend code to get/set the window size and position
lyxrc_C.diff, lyxfunc.diff, lyxrc_h.diff : to save/retrieve the infos
from the Lyx Settings file.

The patches are agains 1.4.0 and only tested on macosx.

     mit freundlichen Gruessen / Yours
                 Armin Hammer

-------- Original Message --------
Subject: What is the qt functions to get/set position of the main window?
Date: Sat, 25 Mar 2006 12:12:19 -0600
From: Bo Peng <[EMAIL PROTECTED]>
To: LyX-Devel <lyx-devel@lists.lyx.org>

Dear list,

I am trying to preserve windows position and size for qt main window.
size seems to be easy but I could not find relevant functions for
windows position. Can anyone help?

Cheers,
Bo




--- ../lyx-1.4.0/src/lyxrc.C    2005-12-12 12:13:03.000000000 +0100
+++ src/lyxrc.C 2005-12-19 07:55:10.000000000 +0100
@@ -151,6 +151,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 },
@@ -284,6 +289,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;  
 }
 
 
@@ -759,6 +770,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_SCREEN_FONT_ROMAN_FOUNDRY:
                        if (lexrc.next()) {
                                roman_font_foundry = lexrc.getString();
@@ -1517,6 +1558,37 @@
                           << typewriter_font_foundry << "\"\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';
+               }
+
        case RC_SCREEN_FONT_SCALABLE:
                if (ignore_system_lyxrc ||
                    use_scalable_fonts != system_lyxrc.use_scalable_fonts) {
@@ -2380,6 +2452,14 @@
                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:
                //xgettext:no-c-format
                str = _("The zoom percentage for screen fonts. A setting of 
100% will make the fonts roughly the same size as on paper.");
--- ../lyx-1.4.0/src/lyxfunc.C  2006-01-18 18:44:01.000000000 +0100
+++ src/lyxfunc.C       2005-12-19 07:54:55.000000000 +0100
@@ -2047,6 +2046,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:
--- ../lyx-1.4.0/src/frontends/qt2/lyx_gui.C    2005-10-19 17:07:36.000000000 
+0200
+++ src/frontends/qt2/lyx_gui.C 2005-12-19 07:54:36.000000000 +0100
@@ -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,7 +61,7 @@
 
 using lyx::support::ltrim;
 using lyx::support::package;
-
+using lyx::support::Path;
 using lyx::frontend::QtView;
 
 namespace os = lyx::support::os;
@@ -221,12 +222,16 @@
        initEncodings();
 
        // initial geometry
-       unsigned int width = 690;
-       unsigned int height = 510;
+       //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(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();
@@ -268,6 +273,18 @@
 
 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;
--- ../lyx-1.4.0/src/lyxrc.h    2005-03-25 16:27:30.000000000 +0100
+++ src/lyxrc.h 2005-12-19 07:55:22.000000000 +0100
@@ -116,6 +116,11 @@
                RC_SCREEN_FONT_SIZES,
                RC_SCREEN_FONT_TYPEWRITER,
                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,17 @@
         *  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;    
 };
 
 

Reply via email to