recent menu works. save as puts current name into text field. revert bug fixed.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1860 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
#include <Menu.h>
|
#include <Menu.h>
|
||||||
#include <MenuItem.h>
|
#include <MenuItem.h>
|
||||||
#include <PrintJob.h>
|
#include <PrintJob.h>
|
||||||
|
#include <Roster.h>
|
||||||
#include <ScrollView.h>
|
#include <ScrollView.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
@@ -120,7 +121,7 @@ StyledEditWindow::InitWindow()
|
|||||||
menu->AddItem(menuItem= new BMenuItem("New", new BMessage(MENU_NEW), 'N'));
|
menu->AddItem(menuItem= new BMenuItem("New", new BMessage(MENU_NEW), 'N'));
|
||||||
menuItem->SetTarget(be_app);
|
menuItem->SetTarget(be_app);
|
||||||
|
|
||||||
menu->AddItem(menuItem= new BMenuItem(new BMenu("Open..."), new BMessage(MENU_OPEN)));
|
menu->AddItem(menuItem= new BMenuItem(fRecentMenu= new BMenu("Open..."), new BMessage(MENU_OPEN)));
|
||||||
menuItem->SetShortcut('O',0);
|
menuItem->SetShortcut('O',0);
|
||||||
menuItem->SetTarget(be_app);
|
menuItem->SetTarget(be_app);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
@@ -281,16 +282,15 @@ StyledEditWindow::MessageReceived(BMessage *message)
|
|||||||
{
|
{
|
||||||
switch(message->what){
|
switch(message->what){
|
||||||
/************file menu:***************/
|
/************file menu:***************/
|
||||||
case MENU_SAVE:
|
case MENU_SAVE: {
|
||||||
{
|
|
||||||
if(!fSaveMessage)
|
if(!fSaveMessage)
|
||||||
fSavePanel->Show();
|
SaveAs();
|
||||||
else
|
else
|
||||||
Save(fSaveMessage);
|
Save(fSaveMessage);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MENU_SAVEAS:
|
case MENU_SAVEAS:
|
||||||
fSavePanel->Show();
|
SaveAs();
|
||||||
break;
|
break;
|
||||||
case B_SAVE_REQUESTED:
|
case B_SAVE_REQUESTED:
|
||||||
Save(message);
|
Save(message);
|
||||||
@@ -531,6 +531,31 @@ StyledEditWindow::MessageReceived(BMessage *message)
|
|||||||
}
|
}
|
||||||
}/***StyledEditWindow::MessageReceived() ***/
|
}/***StyledEditWindow::MessageReceived() ***/
|
||||||
|
|
||||||
|
void
|
||||||
|
StyledEditWindow::MenusBeginning()
|
||||||
|
{
|
||||||
|
BMessage documents;
|
||||||
|
be_roster->GetRecentDocuments(&documents,9,NULL,APP_SIGNATURE);
|
||||||
|
// delete old items..
|
||||||
|
// shatty: it would be preferable to keep the old
|
||||||
|
// menu around instead of continuously thrashing
|
||||||
|
// the menu, but unfortunately there does not
|
||||||
|
// seem to be a straightforward way to update it
|
||||||
|
// going backwards may simplify memory management
|
||||||
|
for (int i = fRecentMenu->CountItems()-1 ; (i >= 0) ; i--) {
|
||||||
|
delete fRecentMenu->RemoveItem(i);
|
||||||
|
}
|
||||||
|
// add new items
|
||||||
|
int count = 0;
|
||||||
|
entry_ref ref;
|
||||||
|
while (documents.FindRef("refs",count++,&ref) == B_OK) {
|
||||||
|
BMessage * openRecent = new BMessage(B_REFS_RECEIVED);
|
||||||
|
openRecent->AddRef("refs",&ref);
|
||||||
|
BMenuItem * item = new BMenuItem(ref.name,openRecent);
|
||||||
|
item->SetTarget(be_app);
|
||||||
|
fRecentMenu->AddItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StyledEditWindow::Quit()
|
StyledEditWindow::Quit()
|
||||||
@@ -573,8 +598,6 @@ StyledEditWindow::QuitRequested()
|
|||||||
status_t
|
status_t
|
||||||
StyledEditWindow::Save(BMessage *message)
|
StyledEditWindow::Save(BMessage *message)
|
||||||
{
|
{
|
||||||
entry_ref ref;
|
|
||||||
const char *name;
|
|
||||||
status_t err;
|
status_t err;
|
||||||
|
|
||||||
if(!message){
|
if(!message){
|
||||||
@@ -583,36 +606,45 @@ StyledEditWindow::Save(BMessage *message)
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
err= message->FindRef("directory", &ref);
|
entry_ref dirref;
|
||||||
|
err= message->FindRef("directory", &dirref);
|
||||||
if(err!= B_OK)
|
if(err!= B_OK)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
const char *name;
|
||||||
err=message->FindString("name", &name);
|
err=message->FindString("name", &name);
|
||||||
if (err!= B_OK)
|
if (err!= B_OK)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
BDirectory dir(&ref);
|
BDirectory dir(&dirref);
|
||||||
err= dir.InitCheck();
|
err= dir.InitCheck();
|
||||||
if(err!= B_OK)
|
if(err!= B_OK)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
BFile file(&dir, name, B_READ_WRITE | B_CREATE_FILE);
|
BEntry entry(&dir, name);
|
||||||
|
err= entry.InitCheck();
|
||||||
|
if(err!= B_OK)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
BFile file(&entry, B_READ_WRITE | B_CREATE_FILE);
|
||||||
err= file.InitCheck();
|
err= file.InitCheck();
|
||||||
if(err!= B_OK)
|
if(err!= B_OK)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err= BTranslationUtils::WriteStyledEditFile(fTextView, &file);
|
err= BTranslationUtils::WriteStyledEditFile(fTextView, &file);
|
||||||
|
if(err != B_OK)
|
||||||
|
return err;
|
||||||
|
|
||||||
if(err>= 0)
|
|
||||||
{
|
|
||||||
SetTitle(name);
|
SetTitle(name);
|
||||||
fSaveItem->SetEnabled(true);
|
|
||||||
if(fSaveMessage!= message)
|
if(fSaveMessage!= message)
|
||||||
{
|
{
|
||||||
delete fSaveMessage;
|
delete fSaveMessage;
|
||||||
fSaveMessage= new BMessage(*message);
|
fSaveMessage= new BMessage(*message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry_ref ref;
|
||||||
|
if (entry.GetRef(&ref) == B_OK) {
|
||||||
|
be_roster->AddToRecentDocuments(&ref,APP_SIGNATURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear clean modes
|
// clear clean modes
|
||||||
@@ -624,6 +656,22 @@ StyledEditWindow::Save(BMessage *message)
|
|||||||
return err;
|
return err;
|
||||||
} /***Save()***/
|
} /***Save()***/
|
||||||
|
|
||||||
|
#include <TextControl.h>
|
||||||
|
#include <Autolock.h>
|
||||||
|
|
||||||
|
status_t
|
||||||
|
StyledEditWindow::SaveAs()
|
||||||
|
{
|
||||||
|
BWindow * saveWindow = fSavePanel->Window();
|
||||||
|
BTextControl * textView =
|
||||||
|
dynamic_cast<BTextControl*>(saveWindow->FindView("text view"));
|
||||||
|
if (textView) {
|
||||||
|
BAutolock lock(saveWindow);
|
||||||
|
textView->SetText(Title());
|
||||||
|
}
|
||||||
|
fSavePanel->Show();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StyledEditWindow::OpenFile(entry_ref *ref)
|
StyledEditWindow::OpenFile(entry_ref *ref)
|
||||||
{
|
{
|
||||||
@@ -637,6 +685,7 @@ StyledEditWindow::OpenFile(entry_ref *ref)
|
|||||||
result = fTextView->GetStyledText(&file); //he he he :)
|
result = fTextView->GetStyledText(&file); //he he he :)
|
||||||
|
|
||||||
if (result == B_OK) {
|
if (result == B_OK) {
|
||||||
|
be_roster->AddToRecentDocuments(ref,APP_SIGNATURE);
|
||||||
fSaveMessage= new BMessage(B_SAVE_REQUESTED);
|
fSaveMessage= new BMessage(B_SAVE_REQUESTED);
|
||||||
if(fSaveMessage){
|
if(fSaveMessage){
|
||||||
BEntry entry(ref, true);
|
BEntry entry(ref, true);
|
||||||
@@ -667,12 +716,12 @@ StyledEditWindow::RevertToSaved()
|
|||||||
alertText.SetTo("Revert to the last version of \"");
|
alertText.SetTo("Revert to the last version of \"");
|
||||||
alertText<< Title();
|
alertText<< Title();
|
||||||
alertText<<"\"? ";
|
alertText<<"\"? ";
|
||||||
revertAlert= new BAlert("revertAlert",alertText.String(), "Cancel", "Ok", 0,
|
revertAlert= new BAlert("revertAlert",alertText.String(), "Cancel", "OK", 0,
|
||||||
B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT);
|
B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_WARNING_ALERT);
|
||||||
revertAlert->SetShortcut(0, B_ESCAPE);
|
revertAlert->SetShortcut(0, B_ESCAPE);
|
||||||
buttonIndex= revertAlert->Go();
|
buttonIndex= revertAlert->Go();
|
||||||
|
|
||||||
if (buttonIndex!=2) { // some sort of cancel, don't revert
|
if (buttonIndex!=1) { // some sort of cancel, don't revert
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ public:
|
|||||||
virtual void Quit();
|
virtual void Quit();
|
||||||
virtual bool QuitRequested();
|
virtual bool QuitRequested();
|
||||||
virtual void MessageReceived(BMessage *message);
|
virtual void MessageReceived(BMessage *message);
|
||||||
|
virtual void MenusBeginning();
|
||||||
|
|
||||||
status_t Save(BMessage *message);
|
status_t Save(BMessage *message);
|
||||||
|
status_t SaveAs();
|
||||||
void OpenFile(entry_ref *ref);
|
void OpenFile(entry_ref *ref);
|
||||||
status_t PageSetup(const char *documentname);
|
status_t PageSetup(const char *documentname);
|
||||||
void Print(const char *documentname);
|
void Print(const char *documentname);
|
||||||
@@ -43,6 +45,7 @@ private:
|
|||||||
BMenuBar *fMenuBar;
|
BMenuBar *fMenuBar;
|
||||||
BMessage *fPrintSettings;
|
BMessage *fPrintSettings;
|
||||||
BMessage *fSaveMessage;
|
BMessage *fSaveMessage;
|
||||||
|
BMenu *fRecentMenu;
|
||||||
BMenuItem *fSaveItem;
|
BMenuItem *fSaveItem;
|
||||||
BMenuItem *fRevertItem;
|
BMenuItem *fRevertItem;
|
||||||
BMenuItem *fUndoItem;
|
BMenuItem *fUndoItem;
|
||||||
|
|||||||
Reference in New Issue
Block a user