[prev in list] [next in list] [prev in thread] [next in thread]
List: calligra-devel
Subject: Re: Question about show view of calligra tables
From: Boudewijn Rempt <boud () valdyas ! org>
Date: 2011-03-16 7:13:24
Message-ID: 201103160813.24450.boud () valdyas ! org
[Download RAW message or body]
On Friday 11 March 2011 Mar, tien dh wrote:
> Hi every one,
> Please help me on that problem, it's so difficult for me to solve:
>
> int main(int argc, char** argv){ QApplication qapp(argc, argv);
> KComponentData cd("graphicsview-test"); Calligra::Tables::Doc doc;
> bool ok = doc.*openUrl*(KUrl("/home/excel_samples/Cash_Flow_Projection_Worksheet.xls"));
> if (!ok) { qDebug() << "failed to load"; return 0;
> } QFont font(KoGlobal::defaultFont());
> Calligra::Tables::CanvasItem* canvas = new
> Calligra::Tables::CanvasItem(&doc); QRect usedArea =
> canvas->*activeSheet*()->usedArea(true); QSizeF
> size(canvas->*activeSheet*()->columnPosition(usedArea.right()+3),
> canvas->*activeSheet*()->rowPosition(usedArea.bottom()+5));
> canvas->setDocumentSize(size); size =
> canvas->*zoomHandler*()->*documentToView*(size);
> canvas->resize(size); canvas->setPos(0, 0);
> Calligra::Tables::ColumnHeaderItem* columnHeader =
> static_cast<Calligra::Tables::ColumnHeaderItem*>(canvas->*columnHeader*());
> static_cast<QGraphicsWidget*>(columnHeader)->resize(size.width(),
> canvas->*zoomHandler*()->zoomItY(font.pointSizeF() + 3));
> columnHeader->setPos(0, -columnHeader->height());
> Calligra::Tables::RowHeaderItem* rowHeader =
> static_cast<Calligra::Tables::RowHeaderItem*>(canvas->*rowHeader*());
> static_cast<QGraphicsWidget*>(rowHeader)->resize(canvas->*zoomHandler*()->zoomItX(YBORDER_WIDTH),
> size.height()); rowHeader->setPos(-rowHeader->width(), 0);
> columnHeader->toolChanged("PanTool");
> rowHeader->toolChanged("PanTool"); QGraphicsScene scene;
> scene.addItem(canvas); scene.addItem(columnHeader);
> scene.addItem(rowHeader); QGraphicsView view(&scene);
> view.show(); qapp.exec();}
>
>
> This portion of code can run and show a excel file. But when I try using
> function: doc.createView().show, only tabbars and scrollbars shown. Sheet
> area is completely black. I try using canvas, canvasWidget and
> canvasController but it isn't successful.
> Anyone can show me why it is and how to render the view to an image ?
Hi Tien,
I'm not completely sure what you're tring to do here -- the mail came across a bit \
garbled. It looks like you're using the graphicsitem canvas, and in that case, you \
shouldn't use the createView() method since that creates a view. But what might be \
happening here is that your implementation of KoCanvasController doesn't size your \
canvas correctly. This is a bit fiddly, and we don't have any good example yet of how \
it should work. I'm working on that, but I haven't had a whole lot of time yet, plus, \
the code is still in a state of flux. You need to make sure, though, that your \
KoCanvasController implementation is complete -- this is the viewport that handles \
the display of the correct part of the document -- and that you set the canvas on \
that.
And make sure that you either use the QWidget based canvas or the QGraphicsItem based \
canvas. If you use the QWidget-based canvas, use the KoAbstraction library. This is \
by far the simplest solution, since it only implies implementing two abstract \
classes.
Here's some sample code written by Mani Chandrasekar for his conf.kde.in presentation \
that shows how it works:
you need to implement two classes (this is the absolute minimum):
-------------
KoAbstractApplicationWindow
KoAbstractApplicationController
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
KoAbstractApplicationWindow((m_controller
= new MyApplicationController(this))),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
----------------
MyApplicationController::MyApplicationController(MainWindow *window)
: KoAbstractApplicationController(window),
m_window(window)
{
}
QWidget * MyApplicationController::mainWindow() const
{
return m_window;
}
void MyApplicationController::setCentralWidget(QWidget *widget)
{
m_window->setCentralWidget(widget);
}
--------------------
And then it's simply a matter of instantiating and calling the method to open a file:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow wnd;
wnd.show();
wnd.controller()->openDocument("/home/mani/Downloads/MicromaxMMX300G.ppt");
return a.exec();
}
--
Boudewijn Rempt | http://www.valdyas.org, http://www.krita.org
_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic