דילוג לתוכן
0
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו אתר

פורום אוצריא

אוצריא - דף הבית
|
קח שותפות בהוספת ספרים
|
תרום לאוצריא
  1. דף הבית
  2. מדריכים ותוכנות עזר לאוצריא
  3. תוספים לאוצריא - דיונים
  4. להורדה | תוסף "וורד לאוצריא" - להורדה, לבדיקה, לתיקון ושיפור.

להורדה | תוסף "וורד לאוצריא" - להורדה, לבדיקה, לתיקון ושיפור.

מתוזמן נעוץ נעול הועבר תוספים לאוצריא - דיונים
תוספיםוורדהורדההקלדה
154 פוסטים 30 כותבים 4.0k צפיות 19 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • יאיר דניאלי יאיר דניאל

      @מתענין כתב:

      בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
      הגירסה הראשונה לשם שינוי עבדה מעולה

      עוד מישהו?

      חנניהח מנותק
      חנניהח מנותק
      חנניה
      כתב ב נערך לאחרונה על ידי
      #95

      @יאיר-דניאל אצלי בגדול עובד, למעט פתח בקורא וחפש בספריה

      תגובה 1 תגובה אחרונה
      1
      • בננהב מנותק
        בננהב מנותק
        בננה
        כתב ב נערך לאחרונה על ידי פלמנמוני
        #96
        פוסט זה נמחק!
        תגובה 1 תגובה אחרונה
        0
        • בננהב מנותק
          בננהב מנותק
          בננה
          כתב ב נערך לאחרונה על ידי פלמנמוני
          #97
          פוסט זה נמחק!
          תגובה 1 תגובה אחרונה
          0
          • בננהב מנותק
            בננהב מנותק
            בננה
            כתב ב נערך לאחרונה על ידי
            #98

            @יאיר-דניאל,

            ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

            ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

            # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

            מי כתב את זה?
            אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

            המטרה
            ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

            ארכיטקטורת הקוד
            מודול Writer = sw/
            כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

            קבצים מרכזיים
            קובץ תפקיד
            sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
            sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
            לוגיקת הפריסה הנוכחית
            LayoutPostIts() ← נקראת בכל רענון
            └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
            └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
            כיצד נקבע המיקום כיום (לפני השינוי):

            // Y נקבע לפי מיקום ה-anchor בטקסט
            tools::Long nY = mpEditWin->LogicToPixel(
            Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

            // X נקבע תמיד לאותו ערך קבוע
            tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
            השינויים שבוצעו
            שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
            קובץ: sw/inc/postithelper.hxx

            שורה: 106

            תוכן השינוי:

            class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
            {
            public:
            VclPtrsw::annotation::SwAnnotationWin mpPostIt;
            bool mbShow;
            bool mbFocus;
            bool mbPendingLayout;
            SwPostItHelper::SwLayoutStatus mLayoutStatus;
            SwLayoutInfo maLayoutInfo;
            tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
            הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

            שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
            קובץ: sw/source/uibase/docvw/PostItMgr.cxx

            פונקציה: LayoutPostIts()

            שורות: 990-1139

            תוכן השינוי:

            לפני השינוי (הקוד המקורי):
            for (auto const& pItem : pPage->mvSidebarItems)
            {
            if (pItem->mbShow)
            {
            // ... קוד ליצירת חלון הערה ...

                tools::Long Y = mpEditWin->LogicToPixel(
                    Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                
                // ... חישוב גובה ההערה ...
                
                pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                              Y - GetInitialAnchorDistance(),
                                              nSidebarWidth,
                                              aPostItHeight,
                                              mlPageEnd );
            }
            

            }
            אחרי השינוי (הקוד החדש):
            // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
            std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
            for (auto const& pItem : pPage->mvSidebarItems)
            {
            if (pItem->mbShow)
            {
            tools::Long Y = mpEditWin->LogicToPixel(
            Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
            aRowGroups[Y].push_back(pItem.get());
            }
            }

            // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
            tools::Long mlPageBorder = 0;
            tools::Long mlPageEnd = 0;

            if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
            {
            mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
            }
            else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
            {
            mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
            }

            for (auto& [nY, aGroup] : aRowGroups)
            {
            tools::Long nX = mlPageBorder;
            for (auto* pItem : aGroup)
            {
            pItem->mLayoutX = nX;
            // חשב את הרוחב של ההערה
            bool bCreated = false;
            VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
            if (bCreated)
            {
            aCreatedPostIts.insert(pPostIt);
            }

                tools::Long nTextHeight;
                if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                    nTextHeight = pPostIt->GetPostItTextHeight();
                else
                    nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
            
                tools::Long postItPixelTextHeight
                    = (comphelper::LibreOfficeKit::isActive()
                           ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                           : nTextHeight);
                tools::Long aPostItHeight
                    = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                           ? pPostIt->GetMinimumSizeWithoutMeta()
                           : postItPixelTextHeight)
                      + pPostIt->GetMetaHeight();
            
                nX += nSidebarWidth + GetSpaceBetween();
            }
            

            }

            // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
            for (auto const& pItem : pPage->mvSidebarItems)
            {
            if (pItem->mbShow)
            {
            // ... קוד ליצירת חלון הערה ...

                tools::Long Y = mpEditWin->LogicToPixel(
                    Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                
                // ... חישוב גובה ההערה ...
                
                pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                              Y - GetInitialAnchorDistance(),
                                              nSidebarWidth,
                                              aPostItHeight,
                                              mlPageEnd );
            }
            

            }
            הסבר:

            שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
            שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
            שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
            איך זה עובד
            הערות באותה שורה (אותו Y) יופיעו זו לצד זו
            המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
            הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
            איך לבנות את הקוד
            דרישות מקדימות

            ודא שהכלים הבאים מותקנים:

            git --version # נדרש git
            cmake --version # נדרש cmake 3.15+
            make --version # או ninja
            gcc --version # gcc 7+ או clang 8+
            שלב 1: הורדת הקוד (אם עדיין לא הורד)

            Clone מלא (גדול! ~4GB)

            git clone https://gerrit.libreoffice.org/core libreoffice
            cd libreoffice

            או: clone רדוד יותר (מהיר יותר לפיתוח)

            git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
            cd libreoffice

            משיכת submodules

            git submodule update --init
            שלב 2: הגדרת build
            על Linux/macOS:
            ./autogen.sh
            --enable-debug
            --disable-online-update
            --without-java
            --without-help
            --without-myspell-dicts
            על Windows (MSYS2):
            ./autogen.sh --enable-debug --disable-online-update
            על Windows (WSL - מומלץ):

            התקנת WSL

            wsl --install

            בתוך WSL

            cd /mnt/e/המצאות/NAU\ WORD/2048/core
            ./autogen.sh --enable-debug --disable-online-update
            שלב 3: בנייה – רק מודול Writer (מהיר!)

            בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

            make -j$(nproc)

            לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

            make sw -j$(nproc)

            בנייה מהירה עוד יותר עם ninja:

            make -j$(nproc) build-nocheck
            שלב 4: בדיקת השינויים

            הרצת LibreOffice עם השינויים

            ./instdir/program/swriter

            פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

            שלב 5: הרצת טסטים

            טסטים ספציפיים למודול Writer

            make sw_uicheck

            טסטים של annotations בלבד

            cd sw && make CppunitTest_sw_uiwriter
            נקודות תשומת לב
            אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
            שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
            בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
            שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
            הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
            חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
            קבצים ששונו
            sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
            sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
            סיכום
            השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

            תאריך: 20 במאי 2026
            נכתב על ידי: Cascade (AI coding assistant)
            בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

            י. פל.י המלאךה 2 תגובות תגובה אחרונה
            1
            • בננהב בננה

              @יאיר-דניאל,

              ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

              ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

              # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

              מי כתב את זה?
              אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

              המטרה
              ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

              ארכיטקטורת הקוד
              מודול Writer = sw/
              כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

              קבצים מרכזיים
              קובץ תפקיד
              sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
              sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
              לוגיקת הפריסה הנוכחית
              LayoutPostIts() ← נקראת בכל רענון
              └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
              └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
              כיצד נקבע המיקום כיום (לפני השינוי):

              // Y נקבע לפי מיקום ה-anchor בטקסט
              tools::Long nY = mpEditWin->LogicToPixel(
              Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

              // X נקבע תמיד לאותו ערך קבוע
              tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
              השינויים שבוצעו
              שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
              קובץ: sw/inc/postithelper.hxx

              שורה: 106

              תוכן השינוי:

              class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
              {
              public:
              VclPtrsw::annotation::SwAnnotationWin mpPostIt;
              bool mbShow;
              bool mbFocus;
              bool mbPendingLayout;
              SwPostItHelper::SwLayoutStatus mLayoutStatus;
              SwLayoutInfo maLayoutInfo;
              tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
              הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

              שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
              קובץ: sw/source/uibase/docvw/PostItMgr.cxx

              פונקציה: LayoutPostIts()

              שורות: 990-1139

              תוכן השינוי:

              לפני השינוי (הקוד המקורי):
              for (auto const& pItem : pPage->mvSidebarItems)
              {
              if (pItem->mbShow)
              {
              // ... קוד ליצירת חלון הערה ...

                  tools::Long Y = mpEditWin->LogicToPixel(
                      Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                  
                  // ... חישוב גובה ההערה ...
                  
                  pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                                Y - GetInitialAnchorDistance(),
                                                nSidebarWidth,
                                                aPostItHeight,
                                                mlPageEnd );
              }
              

              }
              אחרי השינוי (הקוד החדש):
              // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
              std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
              for (auto const& pItem : pPage->mvSidebarItems)
              {
              if (pItem->mbShow)
              {
              tools::Long Y = mpEditWin->LogicToPixel(
              Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
              aRowGroups[Y].push_back(pItem.get());
              }
              }

              // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
              tools::Long mlPageBorder = 0;
              tools::Long mlPageEnd = 0;

              if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
              {
              mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
              }
              else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
              {
              mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
              }

              for (auto& [nY, aGroup] : aRowGroups)
              {
              tools::Long nX = mlPageBorder;
              for (auto* pItem : aGroup)
              {
              pItem->mLayoutX = nX;
              // חשב את הרוחב של ההערה
              bool bCreated = false;
              VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
              if (bCreated)
              {
              aCreatedPostIts.insert(pPostIt);
              }

                  tools::Long nTextHeight;
                  if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                      nTextHeight = pPostIt->GetPostItTextHeight();
                  else
                      nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
              
                  tools::Long postItPixelTextHeight
                      = (comphelper::LibreOfficeKit::isActive()
                             ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                             : nTextHeight);
                  tools::Long aPostItHeight
                      = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                             ? pPostIt->GetMinimumSizeWithoutMeta()
                             : postItPixelTextHeight)
                        + pPostIt->GetMetaHeight();
              
                  nX += nSidebarWidth + GetSpaceBetween();
              }
              

              }

              // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
              for (auto const& pItem : pPage->mvSidebarItems)
              {
              if (pItem->mbShow)
              {
              // ... קוד ליצירת חלון הערה ...

                  tools::Long Y = mpEditWin->LogicToPixel(
                      Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                  
                  // ... חישוב גובה ההערה ...
                  
                  pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                                Y - GetInitialAnchorDistance(),
                                                nSidebarWidth,
                                                aPostItHeight,
                                                mlPageEnd );
              }
              

              }
              הסבר:

              שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
              שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
              שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
              איך זה עובד
              הערות באותה שורה (אותו Y) יופיעו זו לצד זו
              המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
              הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
              איך לבנות את הקוד
              דרישות מקדימות

              ודא שהכלים הבאים מותקנים:

              git --version # נדרש git
              cmake --version # נדרש cmake 3.15+
              make --version # או ninja
              gcc --version # gcc 7+ או clang 8+
              שלב 1: הורדת הקוד (אם עדיין לא הורד)

              Clone מלא (גדול! ~4GB)

              git clone https://gerrit.libreoffice.org/core libreoffice
              cd libreoffice

              או: clone רדוד יותר (מהיר יותר לפיתוח)

              git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
              cd libreoffice

              משיכת submodules

              git submodule update --init
              שלב 2: הגדרת build
              על Linux/macOS:
              ./autogen.sh
              --enable-debug
              --disable-online-update
              --without-java
              --without-help
              --without-myspell-dicts
              על Windows (MSYS2):
              ./autogen.sh --enable-debug --disable-online-update
              על Windows (WSL - מומלץ):

              התקנת WSL

              wsl --install

              בתוך WSL

              cd /mnt/e/המצאות/NAU\ WORD/2048/core
              ./autogen.sh --enable-debug --disable-online-update
              שלב 3: בנייה – רק מודול Writer (מהיר!)

              בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

              make -j$(nproc)

              לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

              make sw -j$(nproc)

              בנייה מהירה עוד יותר עם ninja:

              make -j$(nproc) build-nocheck
              שלב 4: בדיקת השינויים

              הרצת LibreOffice עם השינויים

              ./instdir/program/swriter

              פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

              שלב 5: הרצת טסטים

              טסטים ספציפיים למודול Writer

              make sw_uicheck

              טסטים של annotations בלבד

              cd sw && make CppunitTest_sw_uiwriter
              נקודות תשומת לב
              אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
              שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
              בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
              שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
              הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
              חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
              קבצים ששונו
              sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
              sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
              סיכום
              השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

              תאריך: 20 במאי 2026
              נכתב על ידי: Cascade (AI coding assistant)
              בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

              י. פל.י מנותק
              י. פל.י מנותק
              י. פל.
              כתב ב נערך לאחרונה על ידי
              #99

              @בננה כתב:

              גענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

              יש לי MAC, מאמין שיועיל.
              בטוח שזה אמור לעבוד בweb?

              ע"ה דכו"עע תגובה 1 תגובה אחרונה
              0
              • בננהב בננה

                @יאיר-דניאל,

                ביקשתי מה-AI ב-VS Code לסייע לי בבניית מהדורה של LibreOffice עם הערות ברצף. הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                ביקשתי ממנו לסכם את התהליך שביצע (או תכנן לבצע), ואני מצרף את הסיכום כאן בספוילר.

                # מיקום אופקי של הערות ב-LibreOffice Writer - תיעוד שינויים

                מי כתב את זה?
                אני Cascade, AI coding assistant מבית Cognition. המשתמש ביקש ממני לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות (comments/annotations) אחת אחרי השנייה באותה שורה במקום שכל הערה תתחיל בשורה חדשה.

                המטרה
                ב-LibreOffice Writer, כאשר מספר הערות מקושרות לאותה שורת טקסט, הן מופיעות אחת מתחת לשנייה בסרגל הצד. המטרה היא לאפשר שהערות שמקושרות לאותה שורה יופיעו זו לצד זו (אופקית) – ברצף, ולא כל אחת בשורה חדשה.

                ארכיטקטורת הקוד
                מודול Writer = sw/
                כל הקוד הרלוונטי נמצא תחת sw/source/uibase/docvw/

                קבצים מרכזיים
                קובץ תפקיד
                sw/source/uibase/docvw/PostItMgr.cxx הקובץ הראשי – ניהול ופריסת כל ההערות
                sw/inc/postithelper.hxx מבנה SwLayoutInfo + SwAnnotationItem
                לוגיקת הפריסה הנוכחית
                LayoutPostIts() ← נקראת בכל רענון
                └── LayoutByPage() ← מפרסת הערות לפי עמוד, מונעת חפיפה אנכית
                └── SetPosSizePixelRect() ← קובע מיקום וגודל לכל הערה
                כיצד נקבע המיקום כיום (לפני השינוי):

                // Y נקבע לפי מיקום ה-anchor בטקסט
                tools::Long nY = mpEditWin->LogicToPixel(
                Point(0, pItem->maLayoutInfo.mPosition.Bottom())).Y();

                // X נקבע תמיד לאותו ערך קבוע
                tools::Long nX = mlPageBorder; // ← הבעיה! תמיד אותו X
                השינויים שבוצעו
                שינוי 1: הוספת שדה mLayoutX למבנה SwAnnotationItem
                קובץ: sw/inc/postithelper.hxx

                שורה: 106

                תוכן השינוי:

                class SAL_DLLPUBLIC_RTTI SwAnnotationItem final
                {
                public:
                VclPtrsw::annotation::SwAnnotationWin mpPostIt;
                bool mbShow;
                bool mbFocus;
                bool mbPendingLayout;
                SwPostItHelper::SwLayoutStatus mLayoutStatus;
                SwLayoutInfo maLayoutInfo;
                tools::Long mLayoutX = 0; // מיקום אופקי מחושב ← שדה חדש
                הסבר: הוספתי שדה חדש mLayoutX למחלקה SwAnnotationItem כדי לשמור את המיקום האופקי המחושב של כל הערה.

                שינוי 2: שינוי לוגיקת הפריסה ב-PostItMgr.cxx
                קובץ: sw/source/uibase/docvw/PostItMgr.cxx

                פונקציה: LayoutPostIts()

                שורות: 990-1139

                תוכן השינוי:

                לפני השינוי (הקוד המקורי):
                for (auto const& pItem : pPage->mvSidebarItems)
                {
                if (pItem->mbShow)
                {
                // ... קוד ליצירת חלון הערה ...

                    tools::Long Y = mpEditWin->LogicToPixel(
                        Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                    
                    // ... חישוב גובה ההערה ...
                    
                    pPostIt->SetPosSizePixelRect( mlPageBorder ,  // ← תמיד אותו X
                                                  Y - GetInitialAnchorDistance(),
                                                  nSidebarWidth,
                                                  aPostItHeight,
                                                  mlPageEnd );
                }
                

                }
                אחרי השינוי (הקוד החדש):
                // שלב א: קיבוץ הערות לפי Y וחישוב מיקום אופקי
                std::map<tools::Long, std::vector<SwAnnotationItem*>> aRowGroups;
                for (auto const& pItem : pPage->mvSidebarItems)
                {
                if (pItem->mbShow)
                {
                tools::Long Y = mpEditWin->LogicToPixel(
                Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                aRowGroups[Y].push_back(pItem.get());
                }
                }

                // שלב ב: לכל קבוצת Y – הקצה X שונה לכל הערה
                tools::Long mlPageBorder = 0;
                tools::Long mlPageEnd = 0;

                if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::LEFT )
                {
                mlPageBorder = mpEditWin->LogicToPixel(Point(pPage->mPageRect.Left(), 0)).X() - nSidebarWidth;
                }
                else if (pPage->eSidebarPosition == sw::sidebarwindows::SidebarPosition::RIGHT )
                {
                mlPageBorder = mpEditWin->LogicToPixel( Point(pPage->mPageRect.Right(), 0)).X() + GetSidebarBorderWidth(true);
                }

                for (auto& [nY, aGroup] : aRowGroups)
                {
                tools::Long nX = mlPageBorder;
                for (auto* pItem : aGroup)
                {
                pItem->mLayoutX = nX;
                // חשב את הרוחב של ההערה
                bool bCreated = false;
                VclPtr<SwAnnotationWin> pPostIt = GetOrCreateAnnotationWindow(*pItem, bCreated);
                if (bCreated)
                {
                aCreatedPostIts.insert(pPostIt);
                }

                    tools::Long nTextHeight;
                    if (pPostIt->GetSizePixel().Width() == nSidebarWidth)
                        nTextHeight = pPostIt->GetPostItTextHeight();
                    else
                        nTextHeight = pPostIt->GuessTextHeightForWidth(nSidebarWidth);
                
                    tools::Long postItPixelTextHeight
                        = (comphelper::LibreOfficeKit::isActive()
                               ? mpEditWin->LogicToPixel(Point(0, nTextHeight)).Y()
                               : nTextHeight);
                    tools::Long aPostItHeight
                        = (postItPixelTextHeight < pPostIt->GetMinimumSizeWithoutMeta()
                               ? pPostIt->GetMinimumSizeWithoutMeta()
                               : postItPixelTextHeight)
                          + pPostIt->GetMetaHeight();
                
                    nX += nSidebarWidth + GetSpaceBetween();
                }
                

                }

                // שלב ג: השתמש ב-mLayoutX בקריאה ל-SetPosSizePixelRect
                for (auto const& pItem : pPage->mvSidebarItems)
                {
                if (pItem->mbShow)
                {
                // ... קוד ליצירת חלון הערה ...

                    tools::Long Y = mpEditWin->LogicToPixel(
                        Point(0,pItem->maLayoutInfo.mPosition.Bottom())).Y();
                    
                    // ... חישוב גובה ההערה ...
                    
                    pPostIt->SetPosSizePixelRect( pItem->mLayoutX ,  // ← מיקום X מחושב
                                                  Y - GetInitialAnchorDistance(),
                                                  nSidebarWidth,
                                                  aPostItHeight,
                                                  mlPageEnd );
                }
                

                }
                הסבר:

                שלב א: קיבוץ הערות לפי מיקום Y (שורה בטקסט)
                שלב ב: לכל קבוצת Y, חישוב מיקום X שונה לכל הערה - הערות מקבלות מיקום X שונה בסדר
                שלב ג: שימוש ב-mLayoutX בקריאה ל-SetPosSizePixelRect במקום mlPageBorder קבוע
                איך זה עובד
                הערות באותה שורה (אותו Y) יופיעו זו לצד זו
                המרחק בין הערות נקבע על ידי nSidebarWidth + GetSpaceBetween()
                הערות בשורות שונות יופיעו אחת מתחת לשנייה כרגיל
                איך לבנות את הקוד
                דרישות מקדימות

                ודא שהכלים הבאים מותקנים:

                git --version # נדרש git
                cmake --version # נדרש cmake 3.15+
                make --version # או ninja
                gcc --version # gcc 7+ או clang 8+
                שלב 1: הורדת הקוד (אם עדיין לא הורד)

                Clone מלא (גדול! ~4GB)

                git clone https://gerrit.libreoffice.org/core libreoffice
                cd libreoffice

                או: clone רדוד יותר (מהיר יותר לפיתוח)

                git clone --depth=1 https://gerrit.libreoffice.org/core libreoffice
                cd libreoffice

                משיכת submodules

                git submodule update --init
                שלב 2: הגדרת build
                על Linux/macOS:
                ./autogen.sh
                --enable-debug
                --disable-online-update
                --without-java
                --without-help
                --without-myspell-dicts
                על Windows (MSYS2):
                ./autogen.sh --enable-debug --disable-online-update
                על Windows (WSL - מומלץ):

                התקנת WSL

                wsl --install

                בתוך WSL

                cd /mnt/e/המצאות/NAU\ WORD/2048/core
                ./autogen.sh --enable-debug --disable-online-update
                שלב 3: בנייה – רק מודול Writer (מהיר!)

                בנייה ראשונית מלאה (פעם אחת – עלולה לקחת 30-90 דקות)

                make -j$(nproc)

                לאחר שינויים בקבצי sw בלבד, בנה רק את המודול:

                make sw -j$(nproc)

                בנייה מהירה עוד יותר עם ninja:

                make -j$(nproc) build-nocheck
                שלב 4: בדיקת השינויים

                הרצת LibreOffice עם השינויים

                ./instdir/program/swriter

                פתח מסמך עם מספר הערות באותה שורה ובדוק שהן מופיעות זו לצד זו

                שלב 5: הרצת טסטים

                טסטים ספציפיים למודול Writer

                make sw_uicheck

                טסטים של annotations בלבד

                cd sw && make CppunitTest_sw_uiwriter
                נקודות תשומת לב
                אל תשנה את לוגיקת ה-anchor – רק את חישוב ה-X
                שמור על ה-POSTIT_SPACE_BETWEEN הקיים בין הערות
                בדוק מקרי קצה: הערה אחת בשורה (צריכה להתנהג כרגיל), הערות בעמודות שונות
                שים לב ל-RTL (עברית/ערבית) – המיקום האופקי מתהפך
                הקובץ הקריטי הוא PostItMgr.cxx – 90% מהשינוי שם
                חפש את הסמן mlPageBorder בקוד – כל מקום שמשתמש בו לציר X הוא מועמד לשינוי
                קבצים ששונו
                sw/inc/postithelper.hxx - שורה 106 (הוספת שדה mLayoutX)
                sw/source/uibase/docvw/PostItMgr.cxx - שורות 990-1139 (שינוי לוגיקת פריסה)
                סיכום
                השינויים האלו מאפשרים להערות שמקושרות לאותה שורה בטקסט להופיע זו לצד זו במקום אחת מתחת לשנייה. השינוי הוא מינימלי וממוקד, ומשתמש במנגנון הקיים של LibreOffice לפריסת הערות, רק עם לוגיקה שונה לחישוב המיקום האופקי.

                תאריך: 20 במאי 2026
                נכתב על ידי: Cascade (AI coding assistant)
                בקשה מקורית: לבדוק אם אפשר להוסיף אפשרות ב-LibreOffice Writer למקם הערות אחת אחרי השנייה באותה שורה

                המלאךה מנותק
                המלאךה מנותק
                המלאך
                מפתח
                כתב ב נערך לאחרונה על ידי
                #100

                @בננה כתב:

                הגענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                תוכל להריץ על גיטהאב קוד פייס.

                תגובה 1 תגובה אחרונה
                1
                • י. פל.י י. פל.

                  @בננה כתב:

                  גענו לשלב הסגירה, שבו נדרשת סביבת לינוקס שאינה זמינה לי כרגע.

                  יש לי MAC, מאמין שיועיל.
                  בטוח שזה אמור לעבוד בweb?

                  ע"ה דכו"עע מנותק
                  ע"ה דכו"עע מנותק
                  ע"ה דכו"ע
                  כתב ב נערך לאחרונה על ידי
                  #101

                  @י.-פל. כתב:

                  בטוח שזה אמור לעבוד בweb?

                  לא כל כך... יש אולי כל מיני אפשרויות חיצוניות להריץ על ווב, אבל זה לא ממש מיועד לזה

                  תגובה 1 תגובה אחרונה
                  0
                  • צ מנותק
                    צ מנותק
                    צפניה
                    כתב ב נערך לאחרונה על ידי צפניה
                    #102

                    @יאיר-דניאל משום מה חסום בחדרי מחשבים עבר מקום כי הקודמים כן נפתחו
                    עריכה : הורדתי מהחנות תוספים אז זה לא כל כך דחוף, לי עכ"פ

                    תגובה 1 תגובה אחרונה
                    0
                    • צ מנותק
                      צ מנותק
                      צפניה
                      כתב ב נערך לאחרונה על ידי
                      #103

                      גם אצלי לא עובד המסך מלא, וכן הכל נהיה באותיות גדולות לא כמו בגירסאות המוקדמות 1.2.2 כמדומה

                      יאיר דניאלי תגובה 1 תגובה אחרונה
                      1
                      • צ צפניה

                        גם אצלי לא עובד המסך מלא, וכן הכל נהיה באותיות גדולות לא כמו בגירסאות המוקדמות 1.2.2 כמדומה

                        יאיר דניאלי מנותק
                        יאיר דניאלי מנותק
                        יאיר דניאל
                        תורם לאוצריא ניהול תוספים
                        כתב ב נערך לאחרונה על ידי
                        #104

                        @צפניה כתב:

                        גם אצלי לא עובד המסך מלא, וכן הכל נהיה באותיות גדולות

                        מטפל, בל"נ.
                        תודה!

                        "כִּי רָצוּ עֲבָדֶיךָ אֶת אֲבָנֶיהָ וְאֶת עֲפָרָהּ יְחֹנֵנוּ"

                        צ תגובה 1 תגובה אחרונה
                        2
                        • בננהב מנותק
                          בננהב מנותק
                          בננה
                          כתב ב נערך לאחרונה על ידי
                          #105

                          @יאיר-דניאל @י.-פל. @המלאך @ @ע-ה-דכו-ע הגעתי בנושא הזה לשיא רמת ההבנה שלי בתיכנות [ששואפת לקצת יותר מאפס...] מכאן והלאה אין לאל ידי לעשות כלום.

                          תגובה 1 תגובה אחרונה
                          0
                          • יאיר דניאלי יאיר דניאל

                            @צפניה כתב:

                            גם אצלי לא עובד המסך מלא, וכן הכל נהיה באותיות גדולות

                            מטפל, בל"נ.
                            תודה!

                            צ מנותק
                            צ מנותק
                            צפניה
                            כתב ב נערך לאחרונה על ידי צפניה
                            #106

                            @יאיר-דניאל הוא שואב נותני הגופן מגודל הגופן להצגה בטקסט של הספרים
                            אולי לא הובנתי ואולי כן אצלי הוא שואב את גודל הגופן מההגדרה של הגדול של הגופן בהצגה של טקסט הספרים תודה

                            תגובה 1 תגובה אחרונה
                            1
                            • י. פל.י מנותק
                              י. פל.י מנותק
                              י. פל.
                              כתב ב נערך לאחרונה על ידי
                              #107

                              שימו לב:
                              הגופן מהיום יהיה גופן ברירת המחדל.

                              יאיר דניאלי תגובה 1 תגובה אחרונה
                              0
                              • י. פל.י י. פל.

                                שימו לב:
                                הגופן מהיום יהיה גופן ברירת המחדל.

                                יאיר דניאלי מנותק
                                יאיר דניאלי מנותק
                                יאיר דניאל
                                תורם לאוצריא ניהול תוספים
                                כתב ב נערך לאחרונה על ידי יאיר דניאל
                                #108

                                @י.-פל. כלומר - הגופן שנבחר באוצריא?
                                הייתי עושה אפשרות כזו בכל התוספים - לבחור האם זה יהיה גופן ברירת המחדל או לא.

                                "כִּי רָצוּ עֲבָדֶיךָ אֶת אֲבָנֶיהָ וְאֶת עֲפָרָהּ יְחֹנֵנוּ"

                                דנדיד תגובה 1 תגובה אחרונה
                                0
                                • יאיר דניאלי יאיר דניאל

                                  @י.-פל. כלומר - הגופן שנבחר באוצריא?
                                  הייתי עושה אפשרות כזו בכל התוספים - לבחור האם זה יהיה גופן ברירת המחדל או לא.

                                  דנדיד מנותק
                                  דנדיד מנותק
                                  דנדי
                                  תורם לאוצריא
                                  כתב ב נערך לאחרונה על ידי דנדי
                                  #109

                                  @יאיר-דניאל לא נראה לי שצריך אפשרות כזאת כמו שלא לכל פונקציה בתוכנה יש פונט אחר
                                  ותכלס מה שקורה עכשיו זה שכל התוספים יש להם פונט דיויד וזה נראה רע כולל הוורד [או ששינת בכוונה?]

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • י. פל.י מנותק
                                    י. פל.י מנותק
                                    י. פל.
                                    כתב ב נערך לאחרונה על ידי
                                    #110

                                    אולי לא הסברתי את עצמי:
                                    בכל התוספים כעת הגופן יהיה גופן ברירת המחדל, אא״כ יוצר התוסף הגדיר אחרת, וארז את הגופן בתוך התוסף.
                                    @פלמנמוני תוכל לעדכן את התיעוד? כדאי להוסיף לבדיקות גם קיום גופן בם תואם - אם הוגדר גופן.

                                    יאיר דניאלי תגובה 1 תגובה אחרונה
                                    1
                                    • י. פל.י י. פל.

                                      אולי לא הסברתי את עצמי:
                                      בכל התוספים כעת הגופן יהיה גופן ברירת המחדל, אא״כ יוצר התוסף הגדיר אחרת, וארז את הגופן בתוך התוסף.
                                      @פלמנמוני תוכל לעדכן את התיעוד? כדאי להוסיף לבדיקות גם קיום גופן בם תואם - אם הוגדר גופן.

                                      יאיר דניאלי מנותק
                                      יאיר דניאלי מנותק
                                      יאיר דניאל
                                      תורם לאוצריא ניהול תוספים
                                      כתב ב נערך לאחרונה על ידי
                                      #111

                                      @י.-פל. מה לגבי גודל הגופן?
                                      לדוגמא בוורד לאוצריא - גודל הגופן המקורי היה הרבה יותר נוח, כעת זה נראה ממש לא טוב - הוא ממש גדול ביחס למה שצריך להיות, זה אמור להיות לענ"ד גודל 11 בהתאמה לוורד, או אפילו 10

                                      "כִּי רָצוּ עֲבָדֶיךָ אֶת אֲבָנֶיהָ וְאֶת עֲפָרָהּ יְחֹנֵנוּ"

                                      י. פל.י תגובה 1 תגובה אחרונה
                                      1
                                      • יאיר דניאלי יאיר דניאל

                                        @י.-פל. מה לגבי גודל הגופן?
                                        לדוגמא בוורד לאוצריא - גודל הגופן המקורי היה הרבה יותר נוח, כעת זה נראה ממש לא טוב - הוא ממש גדול ביחס למה שצריך להיות, זה אמור להיות לענ"ד גודל 11 בהתאמה לוורד, או אפילו 10

                                        י. פל.י מנותק
                                        י. פל.י מנותק
                                        י. פל.
                                        כתב ב נערך לאחרונה על ידי
                                        #112

                                        @יאיר-דניאל כתב:

                                        מה לגבי גודל הגופן?

                                        אתה מעודכן בקומיט הרלוונטי?

                                        יאיר דניאלי תגובה 1 תגובה אחרונה
                                        0
                                        • י. פל.י י. פל.

                                          @יאיר-דניאל כתב:

                                          מה לגבי גודל הגופן?

                                          אתה מעודכן בקומיט הרלוונטי?

                                          יאיר דניאלי מנותק
                                          יאיר דניאלי מנותק
                                          יאיר דניאל
                                          תורם לאוצריא ניהול תוספים
                                          כתב ב נערך לאחרונה על ידי
                                          #113

                                          @י.-פל. איזה?

                                          "כִּי רָצוּ עֲבָדֶיךָ אֶת אֲבָנֶיהָ וְאֶת עֲפָרָהּ יְחֹנֵנוּ"

                                          צבי דורש ציוןצ תגובה 1 תגובה אחרונה
                                          0
                                          • יאיר דניאלי יאיר דניאל

                                            @מתענין כתב:

                                            בכל הגירסאות האחרונות הלחצנים של התוסף לא עובדים אצלי בכלל
                                            הגירסה הראשונה לשם שינוי עבדה מעולה

                                            עוד מישהו?

                                            מ מנותק
                                            מ מנותק
                                            מתענין
                                            כתב ב נערך לאחרונה על ידי
                                            #114

                                            @יאיר-דניאל אני מצין שוב כל הגירסאות האחרונות לא עובדות אצלי
                                            על מחשב אפל סיליקון
                                            תודה רבה ויש״כ גדול על כל הפעילות למען הציבור

                                            יאיר דניאלי תגובה 1 תגובה אחרונה
                                            1

                                            שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

                                            נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

                                            בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

                                            הרשמה התחברות

                                            • התחברות

                                            • אין לך חשבון עדיין? הרשמה

                                            • התחברו או הירשמו כדי לחפש.
                                            • פוסט ראשון
                                              פוסט אחרון