changeset 497:97e85897faec

- When the whole text is indented the vertical scroll position won't change to the file beginning anymore. - The menu for showing/hiding the parameter window now correctly shows the window state. git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@737 59b1889a-e5ac-428c-b0c7-476e01d41282
author thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282>
date Thu, 19 Jun 2008 18:00:45 +0000
parents 205b2f8adf4a
children 14ee8d1953a4
files src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h src/indenthandler.cpp src/indenthandler.h
diffstat 4 files changed, 102 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp	Tue Jun 17 13:07:24 2008 +0000
+++ b/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp	Thu Jun 19 18:00:45 2008 +0000
@@ -28,7 +28,7 @@
 
 /* information for notepad */
 CONST INT	nbFunc	= 3;
-CONST CHAR	PLUGIN_NAME[] = "&UniversalIndentGUI_NPP";
+CONST CHAR	PLUGIN_NAME[] = "&UniversalIndentGUI";
 
 /* global values */
 HANDLE				g_hModule			= NULL;
@@ -57,9 +57,6 @@
 	{
 		case DLL_PROCESS_ATTACH:
 		{
-            //IndentHandler *indentHandler = new IndentHandler("E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/indenters", "E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/config", "E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/temp", 0);
-            //indentHandler->show();
-            //app.exec();
             if (!qApp) {
                 int argc = 1;
                 char *argv[] = {"setup", NULL};
@@ -68,33 +65,33 @@
                 indentHandler->setWindowModality( Qt::ApplicationModal );
                 indentHandler->setWindowTitle("UniversalIndentGUI");
                 indentHandler->setWindowIcon(QIcon(QString::fromUtf8(":/mainWindow/icon2.png")));
-                indentHandler->setParameterChangedCallback( indentText );
-                //qapp.setActiveWindow(indentHandler);
+                indentHandler->setParameterChangedCallback( NULL );
+                indentHandler->setWindowClosedCallback( showUiGUI );
             }
 
 			/* Set function pointers */
-			funcItem[0]._pFunc = toggleView;
-			funcItem[1]._pFunc = aboutDlg;
-            funcItem[2]._pFunc = indentText;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pFunc = showUiGUI;
+			funcItem[EXECUTE_TEXT_INDENT_INDEX]._pFunc = indentText;
+            funcItem[TOGGLE_AUTO_UPDATE_INDEX]._pFunc = toggleAutoUpdate;
 		    	
 			/* Fill menu names */
-			strcpy(funcItem[0]._itemName, "&Show Dockable View");
-            strcpy(funcItem[1]._itemName, "&About...");
-            strcpy(funcItem[2]._itemName, "&Indent text");
+			strcpy(funcItem[TOGGLE_SHOW_UIGUI_INDEX]._itemName, "&Show Parameter Settings");
+            strcpy(funcItem[EXECUTE_TEXT_INDENT_INDEX]._itemName, "&Indent text");
+            strcpy(funcItem[TOGGLE_AUTO_UPDATE_INDEX]._itemName, "&Enable Text Auto Update");
 
 			/* Set shortcuts */
-			funcItem[0]._pShKey = new ShortcutKey;
-			funcItem[0]._pShKey->_isAlt		= true;
-			funcItem[0]._pShKey->_isCtrl	= true;
-			funcItem[0]._pShKey->_isShift	= true;
-			funcItem[0]._pShKey->_key		= 'T';
-            funcItem[1]._pShKey = NULL;
-            funcItem[2]._pShKey = NULL;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey = new ShortcutKey;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isAlt	= true;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isCtrl	= true;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isShift	= true;
+			funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_key		= 'T';
+            funcItem[EXECUTE_TEXT_INDENT_INDEX]._pShKey = NULL;
+            funcItem[TOGGLE_AUTO_UPDATE_INDEX]._pShKey = NULL;
 			break;
 		}	
 		case DLL_PROCESS_DETACH:
 		{
-			delete funcItem[0]._pShKey;
+			delete funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey;
             delete indentHandler;
 
 			/* save settings */
@@ -152,7 +149,7 @@
 		if (notifyCode->nmhdr.code == NPPN_TBMODIFICATION)
 		{
 			g_TBWndMgr.hToolbarBmp = (HBITMAP)::LoadImage((HINSTANCE)g_hModule, MAKEINTRESOURCE(IDB_TOOLBAR), IMAGE_BITMAP, 0, 0, (LR_LOADMAP3DCOLORS));
-			::SendMessage(nppData._nppHandle, NPPM_ADDTOOLBARICON, (WPARAM)funcItem[TOGGLE_DOCKABLE_WINDOW_INDEX]._cmdID, (LPARAM)&g_TBWndMgr);
+			::SendMessage(nppData._nppHandle, NPPM_ADDTOOLBARICON, (WPARAM)funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, (LPARAM)&g_TBWndMgr);
 		}
 	}
 }
@@ -213,27 +210,43 @@
 /**************************************************************************
  *	Interface functions
  */
-void toggleView(void)
+void toggleAutoUpdate(void)
 {
-	/* get menu and test if dockable dialog is open */
-	HMENU	hMenu = ::GetMenu(nppData._nppHandle);
-	UINT state = ::GetMenuState(hMenu, funcItem[TOGGLE_DOCKABLE_WINDOW_INDEX]._cmdID, MF_BYCOMMAND);
-	universalIndentGUI_NPPDialog.doDialog(state & MF_CHECKED ? false : true);
+    HMENU	hMenu = ::GetMenu(nppData._nppHandle);
+    UINT state = ::GetMenuState(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND);
+
+    if ( state & MF_CHECKED ) {
+        indentHandler->setParameterChangedCallback( NULL );
+        state = ::CheckMenuItem(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND | MF_UNCHECKED);
+    }
+    else {
+        showUiGUI();
+        indentHandler->setParameterChangedCallback( indentText );
+        state = ::CheckMenuItem(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND | MF_CHECKED);
+    }
+
+    indentText();
 }
 
 
-void aboutDlg(void)
+void showUiGUI(void)
 {
     HMENU	hMenu = ::GetMenu(nppData._nppHandle);
-    UINT state = ::GetMenuState(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND);
+    UINT menuState = ::GetMenuState(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND);
+    bool windowIsVisible = indentHandler->isVisible();
 
-    if ( state & MF_CHECKED ) {
-        indentHandler->hide();
-        state = ::CheckMenuItem(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND | MF_UNCHECKED);
+    if ( menuState & MF_CHECKED ) {
+        
+        if ( windowIsVisible ) {
+        	indentHandler->hide();
+        }
+        menuState = ::CheckMenuItem(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND | MF_UNCHECKED);
     }
     else {
-        indentHandler->show();
-        state = ::CheckMenuItem(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND | MF_CHECKED);
+        if ( !windowIsVisible ) {
+        	indentHandler->show();
+        }
+        menuState = ::CheckMenuItem(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND | MF_CHECKED);
     }
 
 }
@@ -265,15 +278,22 @@
 
         fullEditorText = new char[textLength];
 
-        // Get whole text
+        // Get whole text.
         ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GETTEXT, textLength, (LPARAM)fullEditorText);
 
+        // Get the first visible line and add the max visible lines to it so later scrolling to the correct position is ensured.
+        int firstLine = ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GETFIRSTVISIBLELINE, 0, 0);
+        firstLine += ::SendMessage(getCurrentHScintilla(currentEdit), SCI_LINESONSCREEN, 0, 0) - 1;
+
         QString indentedText = indentHandler->callIndenter(fullEditorText, "cpp");
 
         QByteArray indentedTextByteArray = indentedText.toAscii();
 
-        // Set whole text
+        // Set whole text.
         ::SendMessage(getCurrentHScintilla(currentEdit), SCI_SETTEXT, 0, (LPARAM)indentedTextByteArray.constData());
+
+        // Set first visible line again.
+        ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GOTOLINE, firstLine, 0);
     }
     // Format only the selected text.
     else {
--- a/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h	Tue Jun 17 13:07:24 2008 +0000
+++ b/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h	Thu Jun 19 18:00:45 2008 +0000
@@ -31,7 +31,9 @@
 #include "SettingsPaths.h"
 
 /* menu position in funcItem */
-#define	TOGGLE_DOCKABLE_WINDOW_INDEX	0
+#define	TOGGLE_SHOW_UIGUI_INDEX	    0
+#define	EXECUTE_TEXT_INDENT_INDEX	1
+#define	TOGGLE_AUTO_UPDATE_INDEX	2
 
 
 /* ini file name */
@@ -57,8 +59,8 @@
 void saveSettings(void);
 
 /* menu functions */
-void toggleView(void);
-void aboutDlg(void);
+void showUiGUI(void);
+void toggleAutoUpdate(void);
 void indentText(void);
 
 
--- a/src/indenthandler.cpp	Tue Jun 17 13:07:24 2008 +0000
+++ b/src/indenthandler.cpp	Thu Jun 19 18:00:45 2008 +0000
@@ -47,12 +47,7 @@
 
     setObjectName(QString::fromUtf8("indentHandler"));
 
-    if ( mainWindow == NULL ) {
-        this->mainWindow = this;
-    }
-    else {
-        this->mainWindow = mainWindow;
-    }
+    this->mainWindow = mainWindow;
 
     parameterChangedCallback = NULL;
     indenterSettings = NULL;
@@ -116,7 +111,12 @@
     settingsDirctoryStr = SettingsPaths::getSettingsPath();
     QDir indenterDirctory = QDir(indenterDirctoryStr);
 
-    errorMessageDialog = new UiGuiErrorMessage(mainWindow);
+    if ( mainWindow != NULL ) {
+        errorMessageDialog = new UiGuiErrorMessage(mainWindow);
+    }
+    else {
+        errorMessageDialog = new UiGuiErrorMessage(this);
+    }
 
     indenterIniFileList = indenterDirctory.entryList( QStringList("uigui_*.ini") );
     if ( indenterIniFileList.count() > 0 ) {
@@ -866,7 +866,9 @@
                 spinBox->setToolTip( paramToolTip );
                 spinBox->setMaximumWidth(50);
                 spinBox->setMinimumWidth(50);
-                spinBox->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    spinBox->installEventFilter( mainWindow );
+                }
                 if ( indenterSettings->value(indenterParameter + "/MinVal").toString() != "" ) {
                         spinBox->setMinimum( indenterSettings->value(indenterParameter + "/MinVal").toInt() );
                 }
@@ -885,7 +887,9 @@
                 label->setText(indenterParameter);
                 label->setBuddy(spinBox);
                 label->setToolTip( paramToolTip );
-                label->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    label->installEventFilter( mainWindow );
+                }
 
                 // put all into a layout and add it to the toolbox page
                 QHBoxLayout *hboxLayout = new QHBoxLayout();
@@ -913,7 +917,9 @@
                 chkBox->setText(indenterParameter);
                 paramToolTip = indenterSettings->value(indenterParameter + "/Description").toString();
                 chkBox->setToolTip( paramToolTip );
-                chkBox->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    chkBox->installEventFilter( mainWindow );
+                }
                 toolBoxPages.at(category).vboxLayout->addWidget(chkBox);
 
                 // remember parameter name and reference to its checkbox
@@ -947,7 +953,9 @@
                 lineEdit->setToolTip( paramToolTip );
                 lineEdit->setMaximumWidth(50);
                 lineEdit->setMinimumWidth(50);
-                lineEdit->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    lineEdit->installEventFilter( mainWindow );
+                }
 
                 // create the label
                 QLabel *label = new QLabel( toolBoxPages.at(category).page );
@@ -955,7 +963,9 @@
                 label->setBuddy(lineEdit);
                 label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
                 label->setToolTip( paramToolTip );
-                label->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    label->installEventFilter( mainWindow );
+                }
 
                 // put all into a layout and add it to the toolbox page
                 QHBoxLayout *hboxLayout = new QHBoxLayout();
@@ -1002,7 +1012,9 @@
 				}
                 paramToolTip = indenterSettings->value(indenterParameter + "/Description").toString();
                 comboBox->setToolTip( paramToolTip );
-                comboBox->installEventFilter( mainWindow );
+                if ( mainWindow != NULL ) {
+                    comboBox->installEventFilter( mainWindow );
+                }
 
                 // put all into a layout and add it to the toolbox page
                 QHBoxLayout *hboxLayout = new QHBoxLayout();
@@ -1477,3 +1489,16 @@
         parameterChangedCallback();
     }
 }
+
+
+void IndentHandler::setWindowClosedCallback( void(*winClosedCallback)(void) ) {
+    windowClosedCallback = winClosedCallback;
+}
+
+
+void IndentHandler::closeEvent(QCloseEvent *event) {
+    if ( windowClosedCallback != NULL ) {
+        windowClosedCallback();
+    }
+    event->accept();
+}
\ No newline at end of file
--- a/src/indenthandler.h	Tue Jun 17 13:07:24 2008 +0000
+++ b/src/indenthandler.h	Thu Jun 19 18:00:45 2008 +0000
@@ -58,7 +58,7 @@
     Q_OBJECT
 
 public:
-    IndentHandler(int indenterID, QWidget *mainWindow = 0, QWidget *parent = 0);
+    IndentHandler(int indenterID, QWidget *mainWindow = NULL, QWidget *parent = NULL);
     ~IndentHandler();
 
     QString generateCommandlineCall(QString inputFileExtension);
@@ -75,12 +75,14 @@
     QList<QAction*> getIndenterMenuActions();
     void contextMenuEvent( QContextMenuEvent *event );
     void setParameterChangedCallback( void(*paramChangedCallback)(void) );
+    void setWindowClosedCallback( void(*winClosedCallback)(void) );
 
 signals:
     void indenterSettingsChanged();
 
 protected:
     bool event( QEvent *event );
+    void closeEvent(QCloseEvent *event);
     
 private slots:
     void setIndenter(int indenterID);
@@ -181,6 +183,7 @@
     QAction *actionCreateShellScript;
     QAction *actionResetIndenterParameters;
     void(*parameterChangedCallback)(void);
+    void(*windowClosedCallback)(void);
 };
 
 #endif // INDENTHANDLER_H