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 <[email protected]>
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;
};