(*** This bug was imported into bugs.kde.org ***) Package: kspread Version: KDE 3.0.1 Severity: wishlist Installed from: Mandrake RPMs Compiler: Not Specified OS: Not Specified OS/Compiler notes: Not Specified When a sheets name begins with a bidi letter the UI of the sheet should be reversed: a1 will be in the right part of the screen. (Submitted via bugs.kde.org)
The reversal of the sheet shoud have nothing to do with the name because one can have the content in english and still name it in arabic or hebrew. But the bug actually is that kspread --reverse doesn't reverse the name of the sheet position nor the A B C D order the column names shoud be ... D C B A and the sheet tabs should come to the right with this order Sheet3 Sheet2 Sheet1 I put the bug here because I thought the description goes with my content very well, right?
Subject: Re: reversed bidi sheets in kspread Actually I do not agree. Open kword, write in arabic, boom! text is right aligned. I expect kspread to behave the same way, it should not have anything to do with the desktop direction. Do you have a better idea how to trigger the reversed sheets? ביום שישי, 5 בדצמבר 2003, 02:45, נכתב על ידי Muunzir Taha: > ------- You are receiving this mail because: ------- > You reported the bug, or are watching the reporter. > > http://bugs.kde.org/show_bug.cgi?id=46831 > > > > > ------- Additional Comments From munzirtaha@newhorizons.com.sa 2003-12-05 > 01:45 ------- The reversal of the sheet shoud have nothing to do with the > name because one can have the content in english and still name it in > arabic or hebrew. But the bug actually is that kspread --reverse doesn't > reverse the name of the sheet position nor the A B C D order > > the column names shoud be > ... D C B A > and the sheet tabs should come to the right with this order > Sheet3 Sheet2 Sheet1 > > I put the bug here because I thought the description goes with my content > very well, right?
Open kword English GUI, write in Arabic, the GUI (File, Edit,...) won't be reversed. The sheets should conform with the Interface language not the typed language. Have you ever tried Excel before? If you localize it to Arabic/Hebrew, you have the sheets position to the right. Again, I agree the sheet should go to the right if kspread --reverse is used but not with the filename you open.
Yea! you are speaking about the sheet name not the file name. Sorry for not reading carefully. Anyway, the same argument applies for sheet names. MS Excel does it the right way. The sheet position will only be changed if done manually by the user via a button called Left-to-Right sheet or another called Right-to-Left sheet and both are toggle buttons. This is much better and it allows more flexibility since you have the choice to use all the variations of sheet positions irrespective of the doc content lang, sheet name, .... Automatically, the sheets should be to the right with the --reverse option but the user can change it.
Subject: Re: reversed bidi sheets in kspread ביום רביעי, 10 בדצמבר 2003, 03:10, כתבת: > MS Excel does it the right way. The sheet position will only be changed if > done manually by the user via a button called Left-to-Right sheet or > another called Right-to-Left sheet and both are toggle buttons. This is > much better and it allows more flexibility since you have the choice to use > all the variations of sheet positions irrespective of the doc content lang, i was thinking of auto/rtl/ltr. defaults to auto (as KDE and QT do), and user can overwrite... do you have time to code? I was supposed to fix the RTL stuff there, but I dont have time. > sheet name, .... Automatically, the sheets should be to the right with the > --reverse option but the user can change it. oh no... the sheet has nothing to do with QApplication::reverseLayout(), look at the code!
I agree with Muunzir. The sheet or fiel name are irrelevant to the direction of the sheet. But the --reverse argument is not. I expect KSpread to have the sheet direction RTL when I start it with a Farsi UI and LTR when started with English for example. I would however still need a direction button to change the direction as and when I wish.
Subject: Re: reversed bidi sheets in kspread Well I dont, that sux. Imagine a screatary which uses Farsi UI, and she gets a file which contains information in english. Now imagine, you need to make a report, which must be in english. Of couse you see it in RTL mode. For the punch line, image you start working with Farsi UI, and then move your desktop to some LTR language. The document is almost unreadable and is displayed differently. Imagine konqueror displaying yahoo reversed just because your UI is in the correct direction... ;-) The direction of the content has nothing to do with the UI language you use. I was thinking of this: when you rename a sheet, instead of only name, you can set the direction to RTL/LTR/auto. The auto will be determinnated according to sheetname.isRightToLeft(). ביום שני, 15 בדצמבר 2003, 05:28, נכתב על ידי Arash Zeini: > ------- You are receiving this mail because: ------- > You reported the bug, or are watching the reporter. > > http://bugs.kde.org/show_bug.cgi?id=46831 > > > > > ------- Additional Comments From a.zeini@farsikde.org 2003-12-15 04:28 > ------- I agree with Muunzir. The sheet or fiel name are irrelevant to the > direction of the sheet. But the --reverse argument is not. I expect KSpread > to have the sheet direction RTL when I start it with a Farsi UI and LTR > when started with English for example. I would however still need a > direction button to change the direction as and when I wish.
I think, we are misunderstanding each other here. I said that we need a button to change the direction as and when we need. I.e. regardless the direction of the UI. On the other hand, imagine a secretary that is using the Farsi UI, naming the sheet with a Farsi name, but having contect in English. Or we have the reverse quite often. We have a dozen English-named files that contain pure Farsi content. What to do in these cases? The English name would give you a LTR sheet, but the content would be in RTL. Why force the user to name a file such a way that if influences the correct direction? That doesn't sound like an efficient way. I think the default sheet direction should go with the UI direction, with the option of changing the direction based on the user choice: i.e. a button.
Subject: Re: reversed bidi sheets in kspread >------- Additional Comments From a.zeini@farsikde.org 2003-12-15 23:27 ------- >I think, we are misunderstanding each other here. I said that we need a button to change the direction as and when we need. I.e. regardless the direction of the UI. >On the other hand, imagine a secretary that is using the Farsi UI, naming the sheet with a Farsi name, but having contect in English. Or we have the reverse quite often. We have a dozen English-named files that contain pure Farsi content. What to do in these cases? The English name would give you a LTR sheet, but the content would be in RTL. Why force the user to name a file such a way that if influences the correct direction? That doesn't sound like an efficient way. >I think the default sheet direction should go with the UI direction, with the option of changing the direction based on the user choice: i.e. a button. > > this is why the actual implementation is quite bright. if you use a RTL desktop, that means that the "sheet" will be translated (if it's not and I am wrong I will fix it myself). and thus the display will be RTL anyway. In your example. all that secretary has to do is chage the name of the sheet to english (double click it only). which she should do anyway, if she wants to send the document to someone who does not know Frasi. KOffice needs a way to overwrite this direction. I agree. Like in kword, it should have something on the toolbars. In current versions you can change the direction with ctrl shift, but there is not gui for this. I will add something like this in kspread also. Wait a few weeks/months. I am not sure if this feature can be added in a 1.3.1 version. Please ask in koffice devel for doing this. (and cc me if you do).
Replaced iastrubn@actcom.co.il with null@kde.org due to bounces by reporter
CVS commit by ariya: allow to (explicitly) specify layout direction of the worksheet useful for right-to-left users, e.g. Arabic or Hebrew TODO: save the setting into document CCMAIL: 46831@bugs.kde.org CCMAIL: koffice-devel@mail.kde.org M +19 -19 kspread_canvas.cc 1.411 M +1 -1 kspread_cell.cc 1.620 M +17 -13 kspread_sheet.cc 1.617 M +17 -0 kspread_sheet.h 1.294 M +10 -8 kspread_view.cc 1.781 M +34 -1 dialogs/sheet_properties.cc 1.6 M +5 -0 dialogs/sheet_properties.h 1.4 M +49 -19 dialogs/sheet_properties_base.ui 1.5
CVS commit by ariya: load and save sheet's layout direction CCMAIL: 46831@bugs.kde.org CCMAIL: koffice-devel@mail.kde.org M +20 -4 kspread_sheet.cc 1.618 --- koffice/kspread/kspread_sheet.cc #1.617:1.618 @@ -6420,4 +6420,5 @@ QDomElement KSpreadSheet::saveXML( QDomD QDomElement table = doc.createElement( "table" ); table.setAttribute( "name", d->name ); + table.setAttribute( "layoutDirection", (d->layoutDirection == RightToLeft) ? "rtl" : "ltr" ); table.setAttribute( "columnnumber", (int)d->showColumnNumber); table.setAttribute( "borders", (int)d->showPageBorders); @@ -7670,4 +7671,23 @@ bool KSpreadSheet::loadXML( const QDomEl } + bool detectDirection = true; + d->layoutDirection = LeftToRight; + QString layoutDir = table.attribute( "layoutDirection" ); + if( !layoutDir.isEmpty() ) + { + if( layoutDir == "rtl" ) + { + detectDirection = false; + d->layoutDirection = RightToLeft; + } + else if( layoutDir == "ltr" ) + { + detectDirection = false; + d->layoutDirection = LeftToRight; + } + } + if( detectDirection ) + checkContentDirection( d->name ); + /* older versions of KSpread allowed all sorts of characters that the parser won't actually understand. Replace these with '_' @@ -7962,6 +7982,4 @@ bool KSpreadSheet::loadXML( const QDomEl } - checkContentDirection( d->name ); - return true; } @@ -8292,6 +8310,4 @@ bool KSpreadSheet::setTableName( const Q emit sig_nameChanged( this, old_name ); - checkContentDirection( name ); - setName(name.utf8()); (dynamic_cast<KSpreadSheetIface*>(dcopObject()))->tableNameHasChanged();
CVS commit by ariya: use the new SheetPropertiesCommand it's possible now to undo properties changes CCMAIL: 46831-done@bugs.kde.org M +16 -15 kspread_view.cc 1.786 --- koffice/kspread/kspread_view.cc #1.785:1.786 @@ -1727,5 +1727,4 @@ void KSpreadView::initView() this, SLOT( slotRename() ) ); - d->viewLayout->setColStretch( 1, 10 ); d->viewLayout->setRowStretch( 2, 10 ); @@ -3607,18 +3606,17 @@ void KSpreadView::sheetProperties() if( dlg->exec() ) { - d->activeSheet->setLayoutDirection( dlg->layoutDirection() ); - d->activeSheet->setAutoCalc( dlg->autoCalc() ); - d->activeSheet->setShowGrid( dlg->showGrid() ); - d->activeSheet->setShowPageBorders( dlg->showPageBorders() ); - d->activeSheet->setShowFormula( dlg->showFormula() ); - d->activeSheet->setHideZero( dlg->hideZero() ); - d->activeSheet->setShowFormulaIndicator( dlg->showFormulaIndicator() ); - d->activeSheet->setShowColumnNumber( dlg->columnAsNumber() ); - d->activeSheet->setLcMode( dlg->lcMode() ); - d->activeSheet->setFirstLetterUpper( dlg->capitalizeFirstLetter() ); - - d->doc->addDamage( new SheetDamage( d->activeSheet, SheetDamage::PropertiesChanged ) ); - - // FIXME create command & undo object + SheetPropertiesCommand* command = new SheetPropertiesCommand( d->doc, d->activeSheet ); + command->setLayoutDirection( dlg->layoutDirection() ); + command->setAutoCalc( dlg->autoCalc() ); + command->setShowGrid( dlg->showGrid() ); + command->setShowPageBorders( dlg->showPageBorders() ); + command->setShowFormula( dlg->showFormula() ); + command->setHideZero( dlg->hideZero() ); + command->setShowFormulaIndicator( dlg->showFormulaIndicator() ); + command->setColumnAsNumber( dlg->columnAsNumber() ); + command->setLcMode( dlg->lcMode() ); + command->setCapitalizeFirstLetter( dlg->capitalizeFirstLetter() ); + d->doc->addCommand( command ); + command->execute(); } @@ -6650,4 +6648,7 @@ void KSpreadView::handleDamages( const Q b->cellChanged( 0 ); + d->activeSheet->setRegionPaintDirty( QRect(QPoint(0,0), + QPoint(KS_colMax, KS_rowMax))); + paintUpdates(); refreshView();